En SQL Server, puede usar el SET SHOWPLAN_TEXT
declaración para devolver información detallada sobre cómo se ejecuta una declaración T-SQL.
SHOWPLAN_TEXT
devuelve información como un conjunto de filas que forman un árbol jerárquico que representa los pasos realizados por el procesador de consultas de SQL Server al ejecutar cada declaración.
Es similar a SHOWPLAN_ALL
, excepto que devuelve menos detalles. Por lo tanto, está dirigido a aplicaciones que no pueden manejar los detalles adicionales que SHOWPLAN_ALL
proporciona.
Puede configurar SHOWPLAN_TEXT
a ON
o OFF
.
Cuando SHOWPLAN_TEXT
está ON
, no se ejecutan todas las sentencias T-SQL posteriores. En su lugar, SQL Server devuelve información de ejecución para la instrucción (sin ejecutarla).
Ejemplo
Aquí hay un ejemplo para demostrarlo.
SET SHOWPLAN_TEXT ON;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Tenga en cuenta que SET SHOWPLAN_TEXT
no se puede especificar dentro de un procedimiento almacenado y debe ser la única declaración en un lote.
Así es como se ve el resultado en Azure Data Studio:

Y así es como se ve en mssql-cli (interfaz de línea de comandos):
Commands completed successfully. +------------+ | StmtText | |------------| | SELECT * FROM Cats c INNER JOIN Dogs d ON c.CatName = d.DogName; | +------------+ (1 row affected) +--------------------------------------------------------------------------------------------------------------------------------------+ | StmtText | |--------------------------------------------------------------------------------------------------------------------------------------| | |--Hash Match(Inner Join, HASH:([d].[DogName])=([Expr1003]), RESIDUAL:([Expr1003]=[Test].[dbo].[Dogs].[DogName] as [d].[DogName])) | | |--Table Scan(OBJECT:([Test].[dbo].[Dogs] AS [d])) | | |--Compute Scalar(DEFINE:([Expr1003]=CONVERT_IMPLICIT(nvarchar(255),[Test].[dbo].[Cats].[CatName] as [c].[CatName],0))) | | |--Clustered Index Scan(OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F] AS [c])) | +--------------------------------------------------------------------------------------------------------------------------------------+ (4 rows affected) Commands completed successfully.
Cómo apagarlo
Puedes apagarlo usando SET SHOWPLAN_TEXT OFF
.
Una vez que haya hecho esto, las declaraciones subsiguientes se ejecutarán normalmente.
SET SHOWPLAN_TEXT OFF;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Resultado:
Commands completed successfully. +---------+-----------+---------+-----------+-----------+ | CatId | CatName | DogId | DogName | GoodDog | |---------+-----------+---------+-----------+-----------| | 2 | Fluffy | 2 | Fluffy | 0 | +---------+-----------+---------+-----------+-----------+ (1 row affected) Commands completed successfully.
¿Obsoleto o no?
Según este antiguo artículo de MSDN, SET SHOWPLAN_TEXT
está programado para quedar obsoleto en futuras versiones del plan de presentación y se recomienda que use SET SHOWPLAN_XML
en su lugar.
Sin embargo, ese artículo de MSDN es para SQL Server 2008 R2, y mientras escribo esto, no parece haber quedado obsoleto en SQL Server 2019. De hecho, la documentación actual no menciona la obsolescencia y no está incluida. cuando ejecuto una lista de elementos obsoletos en SQL Server.
De cualquier manera, probablemente valga la pena tener esto en cuenta antes de usarlo en versiones futuras.
Plan de Ejecución Gráfico
Si usa una herramienta gráfica como SSMS o Azure Data Studio, es posible que tenga la opción de ver el plan de ejecución de consulta gráfico estimado para la consulta actual.
- En SSMS puede usar Ctrl + L para hacer esto. O puede hacer clic en Mostrar plan de ejecución estimado o haga clic con el botón derecho en la ventana de consulta y seleccione Mostrar plan de ejecución estimado .
- En Azure Data Studio, puede hacer clic en Explicar sobre la ventana de consulta.
También puede usar SET SHOWPLAN_XML ON
para habilitarlo, y SET SHOWPLAN_XML OFF
para desactivarlo.