2009-07-28 16 views
7

En el DMV sys.dm_db_missing_index_group_stats, hay un campo llamado avg_user_impact. Por BOL, esto muestra elsql server avg_user_impact

Beneficio porcentual medio que las consultas del usuario podrían experimentar si se implementara este grupo de índice faltante. El valor significa que el costo de la consulta se reduciría en promedio en este porcentaje si se implementara este grupo de índice faltante.

Cuando ejecuto una consulta para encontrar los índices que faltan y que tengan el mayor impacto en el rendimiento, veo algunos que afirman que el avg_user_impact será en los miles.

Creé un índice usando una de estas recomendaciones, y nunca fue utilizado de acuerdo con el DMV sys.dm_db_index_usage_stats. Tan pronto como deshabilité el índice, inmediatamente apareció de nuevo como un índice faltante.

¿Es posible que una vez que el campo avg_user_impact muestre más de 100, se equivoque? ¿O es este un ejemplo de cómo un índice recomendado aún debe probarse para determinar su utilidad? ¿Qué estoy haciendo mal o mal entendido?

Respuesta

7

Los índices recomendados y el impacto del usuario son estimaciones del optimizador de costos y, como puede ver, no hay garantía de que sean siempre correctos. Creo que la columna de impacto del usuario puede ser más de 100 por diseño (aunque tendríamos que esperar que un desarrollador de MS del equipo de SQL Server responda aquí para obtener la respuesta real). Siempre es vital probar si la creación de los índices se muestra en el DMV funcionará o no. He tenido la misma experiencia donde se muestra un índice allí, pero una vez creado no se usa realmente, tal vez debido a los detalles de la consulta o la distribución de datos en las tablas, etc. La vista es correcta la mayor parte del tiempo, especialmente para casos simples, pero no siempre.

Además, tenga cuidado con la creación de índices muy amplios, ya que pueden dañar el rendimiento de inserción/actualización más de lo que ayudan a seleccionar el rendimiento, dependiendo de qué tan ocupado esté el servidor.

+2

Otra cosa: hay una consulta muy inteligente para correlacionar los planes de consulta con los índices recomendados aquí: http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/71814032-cd8d-4802-80de -7fb2bee80f41 también: http://sqlblog.com/blogs/jonathan_kehayias/archive/2009/07/27/digging-into-the-sql-plan-cache-finding-missing-indexes.aspx – onupdatecascade

0

Las estadísticas de tabla también deben actualizarse para garantizar que SQL Engine use los índices recién creados.

Después de crear índices RUN

USO AdventureWorks2012; GO EXEC sp_updatestats; GO

Actualizar el comando STATISTICS se asegurará de que todos los planes SQL en caché se invaliden y se construyan nuevos planes de ejecución de sql con los índices recién creados.

+0

Hola, Mayank. Su declaración puede no ser del todo correcta. Aquí hay otra publicación de stackoverflow que debería ayudar: http://stackoverflow.com/questions/1930726/are-statistics-automatically-updated-when-a-new-index-is-created – Oliver