In SQL Server puoi utilizzare SET SHOWPLAN_TEXT
per restituire informazioni dettagliate su come viene eseguita un'istruzione T-SQL.
SHOWPLAN_TEXT
restituisce le informazioni come un insieme di righe che formano un albero gerarchico che rappresenta i passaggi eseguiti da Query Processor di SQL Server durante l'esecuzione di ogni istruzione.
È simile a SHOWPLAN_ALL
, tranne per il fatto che restituisce meno dettagli. È quindi rivolto ad applicazioni che non possono gestire i dettagli extra che SHOWPLAN_ALL
fornisce.
Puoi impostare SHOWPLAN_TEXT
su ON
o OFF
.
Quando SHOWPLAN_TEXT
è ON
, tutte le successive istruzioni T-SQL non vengono eseguite. Invece SQL Server restituisce le informazioni sull'esecuzione per l'istruzione (senza eseguirla).
Esempio
Ecco un esempio da dimostrare.
SET SHOWPLAN_TEXT ON;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Nota che SET SHOWPLAN_TEXT
non può essere specificato all'interno di una stored procedure e deve essere l'unica istruzione in un batch.
Ecco come appare il risultato in Azure Data Studio:
Ed ecco come appare in mssql-cli (interfaccia della riga di 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.
Come spegnerlo
Puoi disattivarlo utilizzando SET SHOWPLAN_TEXT OFF
.
Dopo aver eseguito questa operazione, le istruzioni successive verranno eseguite normalmente.
SET SHOWPLAN_TEXT OFF;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Risultato:
Commands completed successfully. +---------+-----------+---------+-----------+-----------+ | CatId | CatName | DogId | DogName | GoodDog | |---------+-----------+---------+-----------+-----------| | 2 | Fluffy | 2 | Fluffy | 0 | +---------+-----------+---------+-----------+-----------+ (1 row affected) Commands completed successfully.
Deprecato o no?
Secondo questo vecchio articolo MSDN, SET SHOWPLAN_TEXT
è programmato per il ritiro nelle versioni future di showplan e si consiglia di utilizzare SET SHOWPLAN_XML
invece.
Tuttavia, quell'articolo di MSDN è per SQL Server 2008 R2 e, mentre lo scrivo, non sembra essere stato deprecato in SQL Server 2019. In effetti, la documentazione attuale non fa menzione della deprecazione e non è inclusa quando eseguo un elenco di elementi obsoleti in SQL Server.
Ad ogni modo, probabilmente conviene tenerlo a mente prima di usarlo nelle versioni future.
Piano di esecuzione grafica
Se usi uno strumento grafico come SSMS o Azure Data Studio, potresti avere la possibilità di visualizzare il piano di esecuzione della query grafica stimato per la query corrente.
- In SSMS puoi usare Ctrl + L per farlo. Oppure puoi fare clic su Mostra piano di esecuzione stimato oppure fai clic con il pulsante destro del mouse nella finestra della query e seleziona Visualizza piano di esecuzione stimato .
- In Azure Data Studio, puoi fare clic su Spiega pulsante sopra la finestra della query.
Puoi anche usare SET SHOWPLAN_XML ON
per abilitarlo e SET SHOWPLAN_XML OFF
per disabilitarlo.