none
Por lotes oh por Cortes RRS feed

  • Pregunta

  • Saludos, tengo una tabla con 5 Millones de registros  y tengo que cargar esos registros de vez en cuando en una table temporal:

    Un ejemplo de la estructura de la tabla:

    Nota: solo es un ejemplo la tabla tiene mas de 10 columnas.

    IdCorte  NumeroPrestamo BalanceVigente

    188       D8585454            800000

    189        D8585454           70000

    188        D8585455           6000

    189        D8585455           10000

    Tiene varios identificadores entre los cuales esta el IdCorte .

    Actualmente ingreso todos los registros de un solo golpe,  en caso de que los insertara por corte por ejemplo:

    primero todos los que pertenezcan al IdCorte 188 luego los que pertenzscan al IdCorte 189 Ect… en caso de hacerlo asi, seria mas rapido ? oh seria lo mismo que insertarlos todos de un solo golpe?  Si tienen otra recomendacion la tomare en cuenta.



       


    • Editado AlejandroMst jueves, 14 de noviembre de 2019 13:42
    jueves, 14 de noviembre de 2019 13:41

Todas las respuestas

  • ¿La tabla de fuente de datos tiene un índice? En caso afirmativo, ¿en qué columna?

    ¿La tabla temporal tiene índice? En caso afirmativo, ¿en qué columna?

    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    jueves, 14 de noviembre de 2019 14:28
  • la table Fuente tiene indice en el numeroprestamo, pero la temporal no tiene
    • Editado AlejandroMst jueves, 14 de noviembre de 2019 17:14
    jueves, 14 de noviembre de 2019 17:13
  • la table Fuente tiene indice en el numeroprestamo, pero la temporal no tiene

    ¿Cuál será el uso de la tabla temporal? Evaluar la creación de un índice en él, en función de los objetivos de su existencia.

    ---

    Puesto que no hay ningún índice en la tabla temporal, si la tabla fuente se lee en el orden del indice, y este indice es del tipo agrupado (clustered), la lectura en la columna NumeroPrestamo es más eficiente que la lectura de la columna ICorte.:

    -- código #1
    INSERT into #tabla_temporal (IdCorte, NumeroPrestamo, BalanceVigente)
      SELECT IdCorte, NumeroPrestamo, BalanceVigente
        from tabla_origen 
        order by NumeroPrestamo;

     

    ---

    Si elige incluir las filas por cortes, hágalo a través de la columna NumeroPrestamo, debido al índice ya existente.

    ---

    Sin embargo, es esencial que el database tempDB esté correctamente configurado para que la creación de esta tabla temporal no afecte negativamente a los demás procesos que se están ejecutando en ese momento.

    ☆ TempDB - mais um capítulo  



    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Editado José Diz sábado, 16 de noviembre de 2019 10:16
    jueves, 14 de noviembre de 2019 17:24
  • Hola AlejandroMst:

    primero todos los que pertenezcan al IdCorte 188 luego los que pertenzscan al IdCorte 189 Ect… en caso de hacerlo asi, seria mas rapido ? oh seria lo mismo que insertarlos todos de un solo golpe? Si tienen otra recomendacion la tomare en cuenta.

    Lo mismo que si fuera para otra base de datos normal. Si la inserción no afecta al funcionamiento del servidor, porque se hacen en horarios de baja producción, da igual de 1 o varios trozos.

    Si, se realiza en momentos de trabajo intenso, entonces es harina de otro costal. Si lo haces por partes, tienes la ventaja, de que tu proceso se puede ejecutar por lotes, dándole tiempo al servidor a respirar, (dar entrada a la colas de procesos a otras querys).

    jueves, 14 de noviembre de 2019 19:16