Por razones de argumentos, digamos que es para SQL 2005/8. Entiendo que cuando coloca índices en una tabla para sintonizar las declaraciones SELECT
, estos índices deben mantenerse durante las acciones INSERT
/UPDATE
/DELETE
.¿Cuándo MS-SQL mantiene los índices de tabla?
Mi pregunta principal es la siguiente:
Cuando se SQL Server mantener índices de una tabla?
Tengo muchas preguntas siguientes:
ingenuamente por sentado que lo hará después de un comando ha ejecutado. Supongamos que está insertando 20 filas, mantendrá el índice después de que se hayan insertado y comprometido 20 filas.
¿Qué ocurre en la situación en la que una secuencia de comandos cuenta con varias instrucciones contra una mesa, pero por lo demás son declaraciones distintas?
¿El servidor tiene la inteligencia para mantener el índice después de todos instrucciones se ejecutan o se hacen que por estado de cuenta?
que he visto situaciones en las que los índices se eliminan y reconstruyen después de muchos grandes/INSERT
/UPDATE
acciones.
Se supone que esto incurre en la reconstrucción de los índices de la entera de mesa, incluso si sólo se cambia un puñado de filas?
Habría una mejora en el rendimiento en el intento de recopilar
INSERT
yUPDATE
acciones en un lote más grande, decir mediante la recopilación de filas para insertar en una tabla temporal , en lugar de hacer muchas inserciones más pequeñas?- ¿Cómo se comparan las filas de arriba contra la caída de un índice en lugar de tomar el golpe de mantenimiento?
Disculpe la proliferación de preguntas, es algo que siempre he tenido en cuenta, pero al intentar ajustar un guión para obtener un equilibrio, descubro que no sé realmente cuándo se produce el mantenimiento del índice.
Edit: Entiendo que las preguntas de rendimiento dependen en gran medida de la cantidad de datos durante la inserción/actualización y el número de índices. De nuevo por razones de argumentos, tendría dos situaciones:
- Se selecciona una tabla de índices pesados para .
- Una mesa de luz de índice (PK).
Ambas situaciones tendrían un gran lote de inserción/actualización, por ejemplo, 10k + filas.
Editar 2: Soy consciente de poder crear un guión determinado en un conjunto de datos. Sin embargo, perfilar no me dice por qué un enfoque dado es más rápido que otro. Estoy más interesado en la teoría detrás de los índices y donde surgen los problemas de rendimiento, no una respuesta definitiva de "esto es más rápido que eso".
Gracias.
Buena pregunta. Para la segunda parte, dependerá por completo de la cantidad y el contenido de los índices en cuanto a si es más rápido colocar y reconstruir o simplemente actualizar sobre los índices. Como la mayoría de las cosas en SQL, no hay ninguna respuesta o método que sea correcto el 100% del tiempo. – JNK
@JNK Supongo que tanto, espero que alguien pueda bloquear la situación o explicar en qué situaciones un enfoque determinado comienza a ser costoso. –