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
- Abre una ventana conectada a la base que contiene
dbo.PedidoLaboratorio. - Activa Include Actual Execution Plan con
Ctrl+M. - Ejecuta únicamente la primera consulta. En Results debe aparecer
136; en Execution plan debe aparecer el plan de esa consulta. - 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.
- Ejecuta únicamente la segunda consulta y guarda su plan con otro nombre.
- Abre uno de los archivos
.sqlplanmediante 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
- 1Plan superior
La consulta que transforma la columna utiliza
Index Scany lee el índice completo antes de conservar 136 filas. - 2Plan inferior
El predicado directo permite un
Index Seeksobre 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
- 1Costo estimado superior
El plan con
Index Scanmuestra un costo de subárbol estimado de0.486179. - 2Costo estimado inferior
El plan con
Index Seekmuestra0.0035137. Son unidades internas del optimizador, no milisegundos. - 3Identidad del plan
QueryPlanHashes 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.

