I SQL Server kan du bruge SET SHOWPLAN_ALL
erklæring for at returnere detaljerede oplysninger om, hvordan en T-SQL-sætning udføres, samt estimater af ressourcekravene til sætningerne.
SHOWPLAN_ALL
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_TEXT
, bortset fra at SHOWPLAN_ALL
returnerer mere detaljerede oplysninger (og er beregnet til at blive brugt med applikationer, der kan håndtere dets output).
Du kan indstille SHOWPLAN_ALL
til enten ON
eller OFF
.
Når SHOWPLAN_ALL
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).
Det er vigtigt at bemærke, at SHOWPLAN_ALL
giver estimat af ressourcekravene, og at de faktiske ressourcekrav kan være forskellige, når sætningen rent faktisk udføres.
Eksempel
Her er et eksempel til at demonstrere.
SET SHOWPLAN_ALL ON;
GO
SELECT * FROM Cats;
GO
Bemærk, at SET SHOWPLAN_ALL
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), når du bruger lodret output:
Commands completed successfully. -[ RECORD 1 ]------------------------- StmtText | SELECT * FROM Cats; StmtId | 1 NodeId | 1 Parent | 0 PhysicalOp | NULL LogicalOp | NULL Argument | 1 DefinedValues | NULL EstimateRows | 3 EstimateIO | NULL EstimateCPU | NULL AvgRowSize | NULL TotalSubtreeCost | 0.0032853 OutputList | NULL Warnings | NULL Type | SELECT Parallel | 0 EstimateExecutions | NULL -[ RECORD 2 ]------------------------- StmtText | |--Clustered Index Scan(OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F])) StmtId | 1 NodeId | 2 Parent | 1 PhysicalOp | Clustered Index Scan LogicalOp | Clustered Index Scan Argument | OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F]) DefinedValues | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName] EstimateRows | 3 EstimateIO | 0.003125 EstimateCPU | 0.0001603 AvgRowSize | 142 TotalSubtreeCost | 0.0032853 OutputList | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName] Warnings | NULL Type | PLAN_ROW Parallel | 0 EstimateExecutions | 1 (2 rows affected) Commands completed successfully.
Der er mange spalter, så jeg brugte lodret output her, så det gør det nemmere at læse.
Hvis min forespørgsel var mere kompleks, ville flere rækker blive returneret.
Her er et eksempel på en (lidt) mere kompleks forespørgsel.
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Resultat:
Sådan slukker du det
Du kan slå det fra ved at bruge SET SHOWPLAN_ALL OFF
.
Når du har gjort dette, vil efterfølgende sætninger udføres som normalt.
SET SHOWPLAN_ALL OFF;
GO
SELECT * FROM Cats;
GO
Resultat:
Commands completed successfully. +---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+ (3 rows affected) Commands completed successfully.
Forældet eller ej?
Ifølge denne gamle MSDN-artikel, SET SHOWPLAN_ALL
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.