Leer una sugerencia Missing Index en el plan

Una sugerencia Missing Index indica que el optimizador encontró una estructura hipotética con la que estimó un costo menor para la consulta. La señal merece revisión, pero no demuestra que el índice deba crearse ni que el porcentaje mostrado se convierta en la misma mejora de duración.

Producir la sugerencia en SSMS

La consulta filtra por estado y total, agrupa por cliente y ordena los importes más altos:

SELECT TOP (10)
    p.IdCliente,
    COUNT_BIG(*) AS Pedidos,
    SUM(p.Total) AS Importe
FROM dbo.PedidoLaboratorio AS p
WHERE p.Estado = 'Enviado'
  AND p.Total BETWEEN 1200.00 AND 1210.00
GROUP BY p.IdCliente
ORDER BY Importe DESC;

Activa Include Actual Execution Plan con Ctrl+M, ejecuta la consulta y abre Execution plan. SSMS coloca la sugerencia en texto verde encima del árbol.

Sugerencia Missing Index y acceso actual dentro del mismo plan

  1. 1
    Sugerencia estimada

    La línea verde identifica la tabla, las columnas propuestas y un impacto estimado de 80.7244.

  2. 2
    Acceso utilizado

    El plan ejecutado conserva un Index Scan sobre una estructura existente; la sugerencia no reemplazó el plan durante esta ejecución.

Un índice hipotético es una estructura que el optimizador considera para calcular otra alternativa sin crearla físicamente. Por eso la línea puede aparecer junto al plan que realmente se ejecutó.

Interpretar el porcentaje de impacto

El valor Impact compara el costo estimado del plan actual con el costo que el optimizador calculó al considerar la estructura propuesta. Es una comparación dentro del modelo de costos de esa compilación.

El porcentaje no representa:

  • tiempo ahorrado medido con un cronómetro;
  • reducción garantizada de CPU o lecturas;
  • beneficio para todas las consultas que usan la tabla;
  • costo de mantener el índice durante INSERT, UPDATE y DELETE;
  • espacio, redundancia o superposición con índices existentes.

Una estimación alta ayuda a priorizar la investigación. La decisión necesita medir el trabajo realizado y revisar el conjunto completo de índices.

Abrir Missing Index Details

Haz clic derecho en una zona vacía del plan y selecciona Missing Index Details….

Opción Missing Index Details en el menú del plan

  1. 1
    Detalle disponible

    La acción abre otra pestaña con una instrucción propuesta; no crea el índice.

La pestaña nueva conserva la propuesta dentro de un comentario:

Instrucción propuesta por Missing Index Details

  1. 1
    Bloque comentado

    Los delimitadores /* y */ impiden que la instrucción se ejecute al abrirla.

  2. 2
    Columnas propuestas

    Estado y Total forman la clave sugerida; IdCliente aparece en INCLUDE.

No ejecutes la instrucción como un paso automático. La siguiente entrada explicará cómo se forma ese CREATE INDEX; después será necesario compararlo con los índices actuales, darle un nombre válido y medir su efecto.

Leer la solicitud en Showplan XML

Haz clic derecho en una zona vacía del gráfico y selecciona Show Execution Plan XML. Busca MissingIndexes dentro del documento.

Elementos MissingIndexes y ColumnGroup en Showplan XML

  1. 1
    MissingIndexes

    Contiene las solicitudes de índices asociadas con la instrucción.

  2. 2
    MissingIndexGroup y MissingIndex

    El grupo conserva el impacto estimado; el elemento interno identifica base, esquema y tabla.

  3. 3
    EQUALITY

    Estado participa en una comparación de igualdad.

  4. 4
    INEQUALITY

    Total participa en el rango solicitado por BETWEEN.

  5. 5
    INCLUDE

    IdCliente se solicita como columna incluida para cubrir datos necesarios sin formar parte de la clave propuesta.

EQUALITY, INEQUALITY e INCLUDE describen el papel de las columnas en la solicitud. No determinan por sí solos el orden final entre varias columnas de igualdad o de desigualdad, ni comprueban que la estructura sea adecuada para otras consultas.

La línea verde puede mostrar una sola solicitud

Una instrucción puede producir más de una solicitud. Esta consulta reúne dos conteos con filtros distintos:

SELECT
    (
        SELECT COUNT_BIG(*)
        FROM dbo.PedidoLaboratorio AS p
        WHERE p.Estado = 'Enviado'
          AND p.Total BETWEEN 1200.00 AND 1210.00
    ) AS PedidosPorEstado,
    (
        SELECT COUNT_BIG(*)
        FROM dbo.PedidoLaboratorio AS p
        WHERE p.IdCliente BETWEEN 1000 AND 1100
          AND p.Total >= 1500.00
    ) AS PedidosPorCliente;

Ejecuta la consulta con el plan real activado. El gráfico conserva las dos ramas, pero el texto verde presenta una sola sugerencia.

Plan con dos ramas y una sugerencia visible

  1. 1
    Línea visible

    SSMS muestra la propuesta para IdCliente y Total.

  2. 2
    Primera rama

    Resuelve el conteo filtrado por Estado y Total.

  3. 3
    Segunda rama

    Resuelve el conteo filtrado por IdCliente y Total.

Al abrir el XML aparecen las dos solicitudes:

Dos grupos MissingIndex en el XML del mismo plan

  1. 1
    Solicitud por cliente

    Propone IdCliente y Total como columnas de desigualdad, con impacto estimado de 43.5229.

  2. 2
    Solicitud por estado

    Conserva Estado como igualdad y Total como desigualdad, con impacto estimado de 43.2071.

La línea verde es un acceso rápido, no un inventario completo. Cuando el plan tiene varias ramas o instrucciones, el XML permite verificar cuántos grupos quedaron registrados y a qué columnas corresponde cada uno.

Separar señal y decisión

La revisión puede registrarse sin convertir la sugerencia en una orden:

  • Observación: el plan muestra un Index Scan y una sugerencia con impacto estimado de 80.7244.
  • Hipótesis: una estructura con Estado y Total como clave, e IdCliente incluida, podría reducir el trabajo de lectura para esta consulta.
  • Comprobación pendiente: revisar índices existentes, selectividad, escrituras, espacio, lecturas y tiempos antes y después.
  • Límite: la sugerencia procede de una compilación y no evalúa por sí sola el costo total para la carga de trabajo.

Siguiente comprobación razonable

La siguiente entrada desarma la instrucción generada por Missing Index Details: nombre, columnas clave, columnas incluidas y decisiones que SQL Server deja abiertas antes de crear un índice.

Relacionado con

Índice del recorrido

Planes de ejecución

30 artículos de Planes de ejecución
  1. 01Para qué sirve un plan de ejecución
  2. 02Plan estimado, plan real y estadísticas en vivo
  3. 03Cómo se organiza el árbol de un plan de ejecución
  4. 04Flechas, propiedades y número de ejecuciones
  5. 05Mapa de operadores: qué papel cumple cada nodo
  6. 06Filas estimadas y filas reales
  7. 07Index Seek, Index Scan y Table Scan
  8. 08Key Lookup y trabajo repetido
  9. 09Filter, Compute Scalar y Top
  10. 10Nested Loops, Hash Match y Merge Join
  11. 11Sort, Segment y Sequence Project
  12. 12Stream Aggregate y Hash Match (Aggregate)
  13. 13Spool: materialización y reutilización
  14. 14Parallelism: distribuir, repartir y reunir filas
  15. 15Advertencias del plan que requieren investigación
  16. 16Acciones disponibles en el plan gráfico de SSMS
  17. 17Cómo se organiza el XML Showplan
  18. 18Recorrer Analyze Actual Execution Plan
  19. 19Lecturas con SET STATISTICS IO
  20. 20CPU y duración con SET STATISTICS TIME
  21. 21Construir una línea base repetible
  22. 22Guardar y comparar dos planes
  23. 23Historial y regresiones con Query Store
  24. 24Convertir un escenario de Analyze Actual Execution Plan en una hipótesis
  25. 25Leer una sugerencia Missing Index en el plan
  26. 26Entender el CREATE INDEX generado por SSMS
  27. 27Decidir, crear y comprobar un índice
  28. 28De una consulta lenta a una hipótesis comprobable
  29. 29Evaluar un cambio sin optimizar solo una ejecución
  30. 30Análisis guiado de una consulta empresarial reproducible