¿Está bien agregar ciegamente índices faltantes?

21

A menudo uso SSMS para probar mis procedimientos almacenados lentos en busca de índices faltantes. Cada vez que veo un "Índice que falta (Impacto xxx)", mi reacción es simplemente crear el nuevo índice. Esto resulta en una consulta más rápida cada vez que puedo decir.

¿Alguna razón por la que no debería seguir haciendo esto?

OO
fuente
1
¿Me puede decir de dónde puedo obtener esta característica de índice que falta?
Ali Raza Iftikhar

Respuestas:

27

Muchas razones.

Uno de los más grandes que se me ocurre es que los DMV de índice que faltan no tienen en cuenta los índices existentes.

Ejemplo:

Tienes una mesa con ColA, ColB, ColC.

Actualmente tienes un índice en ColA. El índice DMV que falta le sugerirá agregar un índice (ColA, ColB). Esto puede ser correcto, pero lo más inteligente es agregar ColBcomo segunda clave en el índice existente. De lo contrario, tiene cobertura duplicada y desperdicio de espacio y gastos generales.

Del mismo modo, si tiene un índice activado ColB INCLUDE (ColA), puede sugerir un índice activado ColB INCLUDE (ColC). Una vez más, lo más inteligente es agregar ColCa la lista de inclusión en el índice existente.

Los índices sugeridos tienen una vista extremadamente estrecha: solo miran una sola consulta o una sola operación dentro de una sola consulta. No tienen en cuenta lo que ya existe ni sus otros patrones de consulta.

Todavía necesita un ser humano pensante para analizar la estrategia de indexación general y asegurarse de que la estructura de indexación sea eficiente y coherente.

Si no hubiera problemas con solo agregar todos los índices sugeridos, entonces no habría necesidad de que se sugirieran, se implementarían automáticamente.

JNK
fuente
Ya veo, tal vez esa es la razón por la que siento que tengo un bazillion de índices. Supongo que debería tratar de comprender mejor estos planes explicativos y calcular los índices manualmente.
OO
Si buscas en Google duplicate index scriptso algo similar, hay muchos recursos para rastrear estas cosas. Administro la mayoría de mis propios índices y conozco un poco, pero todavía encuentro engaños de vez en cuando.
JNK
"Todavía necesita un ser humano pensante para analizar la estrategia general de indexación y asegurarse de que la estructura de indexación sea eficiente y coherente". +1! Como consultor, he tenido todo tipo de clientes en todo tipo de situaciones. A veces obtengo esos clientes porque tienen demasiados índices (y los incorrectos, redundantes, etc.), todo sugerido por el asesor de ajuste del motor de la base de datos.
Mike Walsh
@JNK: lo haré.
OO
2
Gran punto: los índices superpuestos son definitivamente lo más importante a tener en cuenta aquí. Y, por supuesto, cuantos más índices tenga, más lenta será la inserción, más el impacto en la capacidad de mantenimiento (agregando complejidad), etc.
Jeff Atwood
8

Recomiendo el uso cauteloso de esta técnica de ajuste, ya que he encontrado que las sugerencias de índice que faltan aparecidas por los planes de consulta son consistentemente menos confiables a medida que las consultas y los esquemas de DB se vuelven progresivamente más complejos. Esto se debe a una variedad de razones en mi experiencia:

1) La "mejora porcentual" puede ser muy diferente para todas las consultas más simples / índices más obvios, después de todo, es solo una estimación y no se deriva de los costos reales incurridos o los recuentos de filas reales cuando se ejecuta la consulta. He visto que los costos de consulta aumentan después de implementar un índice sugerido, o incluso no se usa y el plan sigue siendo el mismo.

2) El plan de consulta en sí no es óptimo, ya sea debido a la construcción de la consulta (uniones y cláusula where no optimizada, etc.), o las estimaciones de recuento de filas están desactivadas debido a estadísticas faltantes / desactualizadas. La indexación a un plan de consulta brutalmente malo suele ser, en el mejor de los casos, una solución de curita con solo una mejora incremental en el rendimiento.

3) Es posible que no esté viendo la imagen completa. Esto es especialmente cierto cuando se usa solo el plan gráfico y no se visualiza el XML para ver si se ha sugerido más de un índice faltante. El que se muestra primero en el plan gráfico no es necesariamente el que tiene mayor impacto en la consulta.

4) También he encontrado muchos ejemplos de nuevos índices que se sugieren al modificar el índice existente. Vea las otras respuestas aquí con respecto a este punto, son acertadas, no es necesario que profundice más.

Solo uso las sugerencias de índice que faltan como punto de partida cuando trabajo con una consulta / entorno desconocido para ver dónde buscar más a fondo. Obtuve mejores resultados mirando a los operadores en el plan (principalmente las búsquedas / escaneos / uniones) y comprobando la información sobre herramientas o la ventana de propiedades para ver qué columnas están involucradas y usar eso para determinar los candidatos de índice para evaluar la mejora.

División de piso
fuente
2

Hay un montón de razones, principalmente, saber cómo funcionan y almacenan los índices, siempre creará un índice mejor, o al menos, no peor, que las sugerencias de SSMS

Oleg Dok
fuente