5.3 hallazgo falta índices
Los beneficios del índice, la mayoría de la gente sabe, sino también un índice de daño. Para SQL Server en el índice (o incluso todos los sistemas de gestión de bases de datos, e incluso entonces la mayoría de las cosas del mundo) de que se trate, y no hay buena o mala absoluta absoluta. Adecuado primaria. Demasiados índices conducen a la actualización, inserción, los problemas de rendimiento de eliminación. Índice de demasiado poco puede conducir a la consulta múltiple CPU lenta, IO y más, un escaneo completo de tabla.
Para la mesa central: todos los índices no más de seis.
Para mesa común: no todos los índices de más de cuatro.
Para las tablas pequeñas: todos los índices no más de tres.
5.3.1 necesidad de encontrar la tabla de índices que faltan
Se puede siempre duro para crear el índice correspondiente en la columna correspondiente en el sistema de producción. Después de SQL2008, cuando una ejecución de la consulta, SQL Server optimizador elige el índice más apropiado para la ejecución cuando no encuentra un índice adecuado, a continuación, el optimizador genera un plan de ejecución subóptima, y la información se pierde índices almacenados en los DMV .
Cuando se reinicia el servicio de SQL Server, se almacena información sobre DMV perdidos, así que lo mejor es utilizar la normalidad en unos 90 días para recoger esta información, sería más eficaz. Pero no todos los índices, el índice es probablemente algunos 90 genio utilizado una vez, la indexación debe ser apropiado.
sys.dm_db_missing_index_details: Devuelve la información detallada acerca de los índices que faltan.
sys.dm_db_missing_index_group_stats: información resumida a cambio de un determinado índice.
sys.dm_db_missing_index_groups: rentabilidad del índice que perdió el mango contiene información que se pierde en el grupo índice.
sys.dm_db_missing_index_columns (index_Handle): devuelve información acerca de las columnas en el índice de pérdida.
Principal Campo Descripción
grupo avg_total_user_cost puede ser reducido por el índice medio de consulta de usuario costo.
Después avg_user_impact lograr este grupo índice de falta, el porcentaje promedio de usuario consulta ganancia posible. Este valor representa la realización si este grupo índice de falta, la consulta cuesta un porcentaje medio declive clic.
user_seeks pueden haber sido utilizados por el grupo recomienda que el número índice para encontrar las consultas de los usuarios causado.
user_scans pueden haber sido utilizados por el grupo recomienda número de análisis de un índice de consultas de los usuarios causado.
index_handle: identificar un índice de falta específica. El identificador es único en el servidor
group_handle: la identificación de desaparecidos grupo índice, un índice de grupo sólo contiene un índice.
5.3.2 hallazgo falta índices
Encuentra las tablas y columnas de índice que faltan
SELECT MIG. *, Declaración TABLE_NAME
column_id, COLUMN_NAME, column_usage
DE sys.dm_db_missing_index_details como a mediados
CROSS APPLY sys.dm_db_missing_index_columns (mid.index_handle)
INNER JOIN sys.dm_db_missing_index_groups COMO EN MIG mig.index_handle = mid.index_handle
ORDER BY mig.index_group_handle, mig.index_handle, column_id;
Encuentra un índice que faltan hasta
SELECT TOP 10 *
DE sys.dm_db_missing_index_group_stats
ORDER BY avg_total_user_cost * avg_user_impact * (user_seeks + user_scans) DESC;
consulta combinada
SELECT * * avg_total_user_cost avg_user_impact (user_scans + user_seeks) AS PossibleImprovement,
last_user_seek,
last_user_scan,
[Comunicado] AS [Objeto],
'CREATE INDEX [IDX_' + CONVERT (VARCHAR (32), GS.group_handle) + '_'
+ CONVERT (VARCHAR (32), D.index_handle) + '_'
+ REPLACE (REEMPLAZAR (REPLACE ([Declaración], ']', ''), '[', ''), '', '')
+ ']' + 'ON' + [declaración] + '(' + ISNULL (equality_columns, '')
+ CASO CUANDO equality_columns no es nulo
Y inequality_columns no es NULL ENTONCES ''
ELSE ''
FIN + ISNULL (inequality_columns, '') + ')' + ISNULL ( 'incluyen ('
+ included_columns
+ ')', '') AS Create_Index_Syntax
DE sys.dm_db_missing_index_groups como G
INNER JOIN sys.dm_db_missing_index_group_stats COMO EN GS G.index_group_handle = GS.group_handle
INNER JOIN sys.dm_db_missing_index_details como D = EN G.index_handle D.index_handle
ORDER BY DESC PossibleImprovement