sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan fungerer SHOWPLAN_XML i SQL Server

I SQL Server kan du bruge SET SHOWPLAN_XML erklæring for at returnere detaljerede oplysninger om, hvordan en T-SQL-sætning vil blive udført, i form af et veldefineret XML-dokument.

Det ligner SHOWPLAN_ALL , bortset fra at SHOWPLAN_ALL returnerer sit datasæt af rækker, der danner et hierarkisk træ.

Du kan indstille SHOWPLAN_XML til enten ON eller OFF .

Når SHOWPLAN_XML 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_XML ON;
GO

SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO

Bemærk at SET SHOWPLAN_XML kan ikke specificeres i en lagret procedure, og det skal være den eneste sætning i en batch.

Det resultat, du får, kan afhænge af, hvilket værktøj du bruger til at få adgang til SQL Server.

Når jeg kører dette i Azure Data Studio, kan jeg klikke på de forskellige faner for at få en anden visning af resultatet.

Resultaterne fanen viser den rå XML-streng:

Ved at klikke på rækken åbnes XML-dokumentet i en ny fane:

Forespørgselsplanen fanen viser en grafisk repræsentation af resultatet:

Topoperationer fanen præsenterer dataene i tabelformat, der giver dig mulighed for at sortere dataene efter forskellige metrics:

Virkerer du ikke?

Hvis det ikke virker for dig, skal du sørge for at Medtag faktisk eksekveringsplan er ikke valgt i SSMS. Når dette er valgt, SET SHOWPLAN_XML ON producerer ikke XML Showplan-output.

Sådan slukker du det

Du kan slå det fra ved at bruge SET SHOWPLAN_XML OFF .

Når du har gjort dette, vil efterfølgende sætninger udføres som normalt.

SET SHOWPLAN_XML 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.

Udførelsesplan i GUI'er

Hvis du bruger et grafisk værktøj såsom SSMS eller Azure Data Studio, har du muligvis en genvejsmulighed til at se den anslåede grafiske forespørgselsudførelsesplan. Dette giver dig mulighed for at se forespørgselsplanen uden at skulle køre SET SHOWPLAN_XML ON .

Sådan kører du en estimeret forespørgselsplan:

  • 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 . Dette vil spare dig for at skulle slå SHOWPLAN_XML tænd og sluk i din kode.
  • I Azure Data Studio kan du klikke på Forklar knappen over forespørgselsvinduet.

Du kan også køre en egentlig forespørgselsplan:

  • I SSMS, på Forespørgsel menuen, skal du klikke på Inkluder faktisk eksekveringsplan eller klik på Inkluder faktisk eksekveringsplan værktøjslinjeknap.
  • I Azure Data Studio skal du gå til Vis> Kommandopalet og skriv Kør aktuel forespørgsel med faktisk plan .

Bemærk, at hvis Inkluder faktisk udførelsesplan er valgt i SSMS, SET SHOWPLAN_XML ON option producerer ikke XML Showplan-output. Prøv at rydde Inkluder faktisk udførelsesplan knappen, før du bruger denne SET mulighed.

Jeg synes dog, at Azure Data Studio gør det modsatte SHOWPLAN_XML ON ser ud til at tilsidesætte Kør aktuel forespørgsel med faktisk plan mulighed, undtagen hvis jeg kører Explain først (estimeret forespørgselsplan), hvorefter Kør aktuel forespørgsel med faktisk plan virker pludselig (Faktiske rækker og Faktiske henrettelser kolonner i Topoperationer fanen returnerer de relevante data).

Det er nok bedst at slå XML Showplan fra, før du bruger andre metoder til at hente forespørgselsplanen.


  1. Hvilken indflydelse kan forskellige markørmuligheder have?

  2. På opgraderingsmetoden bliver ikke kaldt i android sqlite

  3. Hvordan kan jeg importere en stor (14 GB) MySQL-dumpfil til en ny MySQL-database?

  4. T-SQL - Aliasing ved hjælp af =versus som