I SQL Server kan du bruge SET SHOWPLAN_TEXT
sætning for at returnere detaljerede oplysninger om, hvordan en T-SQL-sætning udføres.
SHOWPLAN_TEXT
returnerer information som et sæt rækker, der danner et hierarkisk træ, der repræsenterer de trin, som SQL Server-forespørgselsprocessoren tager, når den udfører hver sætning.
Det ligner SHOWPLAN_ALL
, bortset fra at det returnerer færre detaljer. Den er derfor rettet mod applikationer, der ikke kan håndtere de ekstra detaljer, som SHOWPLAN_ALL
giver.
Du kan indstille SHOWPLAN_TEXT
til enten ON
eller OFF
.
Når SHOWPLAN_TEXT
er ON
, udføres alle efterfølgende T-SQL-sætninger ikke. I stedet returnerer SQL Server udførelsesoplysninger for sætningen (uden at udføre den).
Eksempel
Her er et eksempel til at demonstrere.
SET SHOWPLAN_TEXT ON;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Bemærk, at SET SHOWPLAN_TEXT
kan ikke specificeres i en lagret procedure, og det skal være den eneste sætning i en batch.
Sådan ser resultatet ud i Azure Data Studio:
Og her er, hvordan det ser ud i mssql-cli (kommandolinjegrænseflade):
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.
Sådan slukker du det
Du kan slå det fra ved at bruge SET SHOWPLAN_TEXT OFF
.
Når du har gjort dette, vil efterfølgende sætninger udføres som normalt.
SET SHOWPLAN_TEXT OFF;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Resultat:
Commands completed successfully. +---------+-----------+---------+-----------+-----------+ | CatId | CatName | DogId | DogName | GoodDog | |---------+-----------+---------+-----------+-----------| | 2 | Fluffy | 2 | Fluffy | 0 | +---------+-----------+---------+-----------+-----------+ (1 row affected) Commands completed successfully.
Forældet eller ej?
Ifølge denne gamle MSDN-artikel, SET SHOWPLAN_TEXT
er planlagt til udfasning i fremtidige showplan-versioner, og det anbefales, at du bruger SET SHOWPLAN_XML
i stedet.
Den MSDN-artikel er dog til SQL Server 2008 R2, og mens jeg skriver dette, ser den ikke ud til at være blevet forældet i SQL Server 2019. Faktisk nævner den aktuelle dokumentation ikke noget om afskrivning, og den er ikke inkluderet når jeg kører en liste over forældede elementer i SQL Server.
Uanset hvad, kan det nok betale sig at have dette i tankerne, før du bruger det i fremtidige udgivelser.
Grafisk udførelsesplan
Hvis du bruger et grafisk værktøj såsom SSMS eller Azure Data Studio, har du muligvis mulighed for at se den anslåede grafiske forespørgselsudførelsesplan for den aktuelle forespørgsel.
- I SSMS kan du bruge Ctrl + L at gøre dette. Eller du kan klikke på Vis estimeret eksekveringsplan ikonet, eller højreklik i forespørgselsvinduet og vælg Vis estimeret eksekveringsplan .
- I Azure Data Studio kan du klikke på Forklar knappen over forespørgselsvinduet.
Du kan også bruge SET SHOWPLAN_XML ON
for at aktivere det, og SET SHOWPLAN_XML OFF
for at deaktivere den.