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!
sql-server
performance
index
BlueChippy
fuente
fuente
insert into
y por el momento no hay unaorder by
cláusula, pero podría agregar eso si fuera útil. ID y código también se indexan por separado.Respuestas:
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. :)
fuente
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:
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.
fuente