No SQL Server, você pode usar o
SET SHOWPLAN_TEXT
instrução para retornar informações detalhadas sobre como uma instrução T-SQL é executada. SHOWPLAN_TEXT
retorna informações como um conjunto de linhas que formam uma árvore hierárquica que representa as etapas executadas pelo processador de consulta do SQL Server à medida que ele executa cada instrução. É semelhante a
SHOWPLAN_ALL
, exceto que ele retorna menos detalhes. Portanto, é voltado para aplicativos que não podem lidar com os detalhes extras que SHOWPLAN_ALL
fornece. Você pode definir
SHOWPLAN_TEXT
para ON
ou OFF
. Quando
SHOWPLAN_TEXT
está ON
, todas as instruções T-SQL subsequentes não serão executadas. Em vez disso, o SQL Server retorna informações de execução para a instrução (sem executá-la). Exemplo
Aqui está um exemplo para demonstrar.
SET SHOWPLAN_TEXT ON;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Observe que
SET SHOWPLAN_TEXT
não pode ser especificado dentro de um procedimento armazenado e deve ser a única instrução em um lote. Veja como é o resultado no Azure Data Studio:
E aqui está o que parece no mssql-cli (interface de linha de comando):
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.
Como desativá-lo
Você pode desativá-lo usando
SET SHOWPLAN_TEXT OFF
. Depois de fazer isso, as instruções subsequentes serão executadas 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.
Descontinuado ou não?
De acordo com este antigo artigo do MSDN,
SET SHOWPLAN_TEXT
está programado para descontinuação em futuras versões do plano de exibição, e é recomendado que você use SET SHOWPLAN_XML
em vez de. No entanto, esse artigo do MSDN é para o SQL Server 2008 R2 e, enquanto escrevo isso, não parece ter sido preterido no SQL Server 2019. Na verdade, a documentação atual não menciona a depreciação e não está incluída quando executo uma lista de itens obsoletos no SQL Server.
De qualquer forma, provavelmente vale a pena ter isso em mente antes de usá-lo em versões futuras.
Plano de Execução Gráfica
Se você estiver usando uma ferramenta gráfica, como SSMS ou Azure Data Studio, poderá ter a opção de exibir o plano de execução de consulta gráfica estimado para a consulta atual.
- No SSMS, você pode usar Ctrl + L para fazer isso. Ou você pode clicar em Exibir plano de execução estimado ícone ou clique com o botão direito do mouse na janela de consulta e selecione Exibir plano de execução estimado .
- No Azure Data Studio, você pode clicar no botão Explicar botão acima da janela de consulta.
Você também pode usar
SET SHOWPLAN_XML ON
para habilitá-lo e SET SHOWPLAN_XML OFF
para desativá-lo.