Guardar y comparar dos planes

Dos consultas pueden devolver el mismo resultado mediante estrategias distintas. Guardar cada plan como .sqlplan permite conservar la evidencia y abrir ambos en Compare Showplan sin depender de la memoria o de capturas separadas.

Guardar una evidencia que pueda volver a abrirse

Un archivo .sqlplan contiene XML Showplan. Conserva operadores, propiedades, texto de la instrucción y, cuando procede de un plan real, contadores de ejecución. Antes de compartirlo hay que revisar nombres de objetos, predicados, literales y otros datos sensibles.

En SSMS, la acción Save Execution Plan As se abre sobre el lienzo del plan. Para comparar dos archivos, se abre uno y se utiliza Compare Showplan para seleccionar el segundo. El orden superior e inferior solo identifica la posición de cada archivo; no significa automáticamente “antes” y “después”.

Cómo producir y abrir la comparación

  1. Abre una ventana conectada a la base que contiene dbo.PedidoLaboratorio.
  2. Activa Include Actual Execution Plan con Ctrl+M.
  3. Ejecuta únicamente la primera consulta. En Results debe aparecer 136; en Execution plan debe aparecer el plan de esa consulta.
  4. Haz clic derecho en una zona vacía del plan, elige Save Execution Plan As y guarda el archivo con un nombre que identifique el predicado directo.
  5. Ejecuta únicamente la segunda consulta y guarda su plan con otro nombre.
  6. Abre uno de los archivos .sqlplan mediante File → Open → File. En su lienzo, haz clic derecho y elige Compare Showplan; selecciona el otro archivo.

SSMS coloca un plan arriba y otro abajo. Antes de interpretar la comparación, revisa el texto de cada instrucción para saber cuál ocupa cada posición. Al seleccionar operadores equivalentes, la vista muestra sus propiedades superiores e inferiores; si el panel no está visible, presiona F4.

Dos consultas con el mismo resultado

La primera consulta compara directamente la fecha:

DECLARE @Desde date = '2025-01-01';

SELECT COUNT_BIG(*) AS Pedidos
FROM dbo.PedidoLaboratorio AS p
WHERE p.FechaPedido >= @Desde
OPTION (RECOMPILE);

La segunda transforma la columna antes de compararla:

DECLARE @Desde date = '2025-01-01';

SELECT COUNT_BIG(*) AS Pedidos
FROM dbo.PedidoLaboratorio AS p
WHERE DATEDIFF(DAY, @Desde, p.FechaPedido) >= 0
OPTION (RECOMPILE);

Ambas devuelven 136 pedidos. Esa equivalencia de resultado es el punto de partida, no la conclusión de rendimiento.

Compare Showplan alinea las estrategias

Comparación de un Index Scan y un Index Seek en Compare Showplan

  1. 1
    Plan superior

    La consulta que transforma la columna utiliza Index Scan y lee el índice completo antes de conservar 136 filas.

  2. 2
    Plan inferior

    El predicado directo permite un Index Seek sobre el mismo índice y entrega las mismas 136 filas.

La vista comparada ayuda a ubicar ramas, operadores y diferencias estructurales. No demuestra por sí sola cuál alternativa consume menos lecturas, CPU o duración.

Las propiedades quedan lado a lado

Propiedades superiores e inferiores en Compare Showplan

  1. 1
    Costo estimado superior

    El plan con Index Scan muestra un costo de subárbol estimado de 0.486179.

  2. 2
    Costo estimado inferior

    El plan con Index Seek muestra 0.0035137. Son unidades internas del optimizador, no milisegundos.

  3. 3
    Identidad del plan

    QueryPlanHash es distinto en cada lado, por lo que las estructuras no son el mismo plan guardado dos veces.

También conviene contrastar filas leídas y devueltas, predicados, advertencias, memoria y número de ejecuciones. Un porcentaje alto solo expresa una comparación de costos estimados dentro del lote o la vista; no sustituye una línea base.

Comparar no equivale a aprobar un cambio

La diferencia Scan–Seek formula una hipótesis: el predicado directo parece requerir menos trabajo. Para comprobarla hay que volver a medir lecturas, CPU y duración con el método de la línea base. También debe verificarse que el cambio conserve el significado de la consulta para todos los parámetros relevantes.

Qué podemos concluir

Los archivos guardados muestran dos estrategias distintas para el mismo resultado. Compare Showplan permite alinearlas y revisar sus propiedades, pero la decisión necesita métricas observadas y condiciones documentadas.

Siguiente comprobación razonable

La siguiente entrada utiliza Query Store para relacionar varios planes con sus intervalos y estadísticas de ejecución, sin depender de dos archivos elegidos manualmente.

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