¿Debo reconstruir el índice después de un truncado / inserción grande?

10

Tengo un procedimiento almacenado que trunca algunas tablas con alrededor de 1,75 millones de filas en cada una, antes de insertar nuevos datos (basados ​​en datos de otras tablas, cálculos, etc.)

El esquema básico es muy simple:

  • Truncar tablas
  • Inserte 1.75M filas en 'lotes' de alrededor de 75,000 por vez.

Me pregunto si debería reconstruir explícitamente los índices en cualquier momento de este proceso. p.ej

  • Truncar tablas
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [o algo similar]
  • Insertar 1.75 millones de filas

o quizás

  • ALTER INDEX ALL ON xxx DISABLE
  • Truncar tablas
  • Insertar 1.75 millones de filas
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [o algo similar]

Cualquier ayuda apreciada ... no es un DBA: ¡un desarrollador que conoce bastante bien los DB es más preciso!

BlueChippy
fuente
Un poco más de información sobre la estructura de la tabla, los índices que existen hoy en día y el aspecto de los datos que se están insertando (¿está en un cierto orden? ¿Eso se alinea con el índice agrupado?) Ayudaría. ¿También supongo que esta tabla no está disponible hasta que se complete este proceso? Es bueno saber que tiene opciones para la importación masiva.
Mike Walsh
Tal vez debería truncar la inserción de la tabla en ella y ver cuál es su fragmentación de índice para ver si es necesario o no.
Zane
v: 2008 estándar. Los datos de origen son múltiples tablas de preparación, antes de que estos datos se carguen desde csv, excel, Oracle y otros db de SQL. Las estructuras de la tabla son todas idénticas en esta etapa: 6 ID de caracteres, 3 códigos de caracteres, 10 cols de decimal (20,5). La clave principal es ID + Código. Los datos se están cargando insert intoy por el momento no hay una order bycláusula, pero podría agregar eso si fuera útil. ID y código también se indexan por separado.
BlueChippy

Respuestas:

6

Como con la mayoría de las preguntas de este tipo, depende. Es poco probable que inserte los datos en el orden "correcto" para todos los índices involucrados, lo que significa que es probable que todos esos índices encuentren mucha división de páginas durante el proceso de inserción. Así que supongamos que está insertando en orden de índice agrupado. Puede deshabilitar todos los índices no agrupados, truncar, realizar su inserción y luego reconstruir todos sus índices no agrupados. Por supuesto, probar ambos enfoques le dirá cuál es la verdad más rápido, independientemente de la teoría que lo respalde. :)

Ben Thul
fuente
1

Plan Basic con todos los índices habilitados puede ser lento y provocar fragmentación.

ALTERAR ÍNDICE RECONSTRUCCIÓN en una tabla truncada y, por lo tanto, vacía no sirve para nada, por lo que debe modificar su Plan A. Debe ser:

  • TRUNCAR
  • Insertar
  • ALTERAR ÍNDICE RECONSTRUCCIÓN

Todavía puede ser lento, pero al menos obtienes índices precisos.

El plan B está bien. Pruebe los tres y vea cuál es el más rápido y cuál proporciona la menor fragmentación del índice. Luego decida si la reconstrucción vale la pena.

Orbilin
fuente