Revisar sugerencias de índices faltantes
Señal o problema observado
Una consulta realiza muchas lecturas o presenta un acceso costoso y el plan sugiere un índice. Queremos reunir las sugerencias registradas para la base actual y ordenarlas por su beneficio acumulado estimado.
Qué necesitamos distinguir
Estas filas describen oportunidades detectadas durante la optimización. No evalúan por completo índices existentes parecidos, costo de escritura, almacenamiento, mantenimiento ni todas las consultas que usan la tabla. La consulta solo presenta evidencia; no genera ni crea índices.
Consulta
DECLARE @Cantidad INT = 25;
SELECT TOP (@Cantidad)
osi.sqlserver_start_time AS InicioInstancia,
DB_NAME(mid.database_id) AS BaseDatos,
OBJECT_SCHEMA_NAME(mid.object_id, mid.database_id) AS Esquema,
OBJECT_NAME(mid.object_id, mid.database_id) AS Tabla,
mid.equality_columns AS ColumnasIgualdad,
mid.inequality_columns AS ColumnasDesigualdad,
mid.included_columns AS ColumnasIncluidas,
migs.user_seeks AS BusquedasEstimadas,
migs.user_scans AS EscaneosEstimados,
migs.avg_total_user_cost AS CostoPromedio,
migs.avg_user_impact AS ImpactoPromedioPorcentaje,
CONVERT
(
DECIMAL(28, 2),
(migs.user_seeks + migs.user_scans)
* migs.avg_total_user_cost
* migs.avg_user_impact / 100.0
) AS BeneficioAcumuladoEstimado,
migs.last_user_seek AS UltimaBusqueda,
migs.last_user_scan AS UltimoEscaneo
FROM sys.dm_db_missing_index_group_stats AS migs
INNER JOIN sys.dm_db_missing_index_groups AS mig
ON mig.index_group_handle = migs.group_handle
INNER JOIN sys.dm_db_missing_index_details AS mid
ON mid.index_handle = mig.index_handle
CROSS JOIN sys.dm_os_sys_info AS osi
WHERE mid.database_id = DB_ID()
ORDER BY
BeneficioAcumuladoEstimado DESC,
migs.user_seeks DESC;
Parámetros o permisos
Ejecuta la consulta en la base que quieres revisar. @Cantidad limita la lista. Se necesita VIEW SERVER STATE, o VIEW SERVER PERFORMANCE STATE desde SQL Server 2022.
La información no persiste tras reiniciar el motor y las DMV de índices faltantes conservan hasta 600 filas. InicioInstancia aporta contexto temporal, pero las sugerencias también pueden cambiar cuando se modifican objetos o se optimizan nuevas consultas.
Cómo leer el resultado
ColumnasIgualdad, ColumnasDesigualdad y ColumnasIncluidas describen la forma que el optimizador consideró útil. El beneficio combina frecuencia, costo estimado e impacto porcentual; sirve para ordenar, no para calcular ahorro real.
Agrupa sugerencias semejantes de una misma tabla y compáralas con sus índices actuales. Si se diseña un candidato, las columnas de igualdad suelen preceder a las de desigualdad, pero el orden interno debe considerar selectividad y consultas reales.
Qué conclusión sí permite obtener
Permite priorizar sugerencias observadas para la base actual, conocer qué columnas participaron y estimar cuáles merecen una evaluación manual más profunda.
Qué conclusión todavía no permite obtener
No autoriza a crear todos los índices sugeridos ni predice su beneficio real. No incorpora completamente el costo de escrituras, espacio, mantenimiento, redundancia o impacto sobre otras consultas.
Siguiente comprobación razonable
Revisa los índices que ya existen y su uso. Comprueba que el candidato atienda una consulta importante, prueba su efecto en un entorno controlado y documenta también el costo de mantenerlo.