sql >> Databasteknik >  >> RDS >> Sqlserver

Hur SHOWPLAN_XML fungerar i SQL Server

I SQL Server kan du använda SET SHOWPLAN_XML uttalande för att returnera detaljerad information om hur en T-SQL-sats kommer att exekveras, i form av ett väldefinierat XML-dokument.

Det liknar SHOWPLAN_ALL , förutom att SHOWPLAN_ALL returnerar sin datamängd med rader som bildar ett hierarkiskt träd.

Du kan ställa in SHOWPLAN_XML till antingen ON eller OFF .

När SHOWPLAN_XML är ON , exekveras inte alla efterföljande T-SQL-satser. Istället returnerar SQL Server exekveringsinformation för satsen (utan att köra den).

Exempel

Här är ett exempel att visa.

SET SHOWPLAN_XML ON;
GO

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

Observera att SET SHOWPLAN_XML kan inte specificeras i en lagrad procedur, och det måste vara den enda satsen i en batch.

Resultatet du får kan bero på vilket verktyg du använder för att komma åt SQL Server.

När jag kör detta i Azure Data Studio kan jag klicka på de olika flikarna för att få en annan bild av resultatet.

Resultaten fliken visar den råa XML-strängen:

Genom att klicka på raden öppnas XML-dokumentet på en ny flik:

Frågeplanen fliken visar en grafisk representation av resultatet:

Bästa funktionerna fliken presenterar data i tabellformat som gör att du kan sortera data efter olika mätvärden:

Fungerar inte?

Om det inte fungerar för dig, se till att Inkludera faktisk utförandeplan är inte vald i SSMS. När detta är valt, SET SHOWPLAN_XML ON producerar inte XML Showplan-utdata.

Hur man stänger av det

Du kan stänga av den genom att använda SET SHOWPLAN_XML OFF .

När du har gjort detta kommer efterföljande satser att köras som vanligt.

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.

Exekutionsplan i GUI

Om du använder ett grafiskt verktyg som SSMS eller Azure Data Studio kan du ha ett genvägsalternativ för att visa den beräknade grafiska frågeexekveringsplanen. Detta gör att du kan se frågeplanen utan att behöva köra SET SHOWPLAN_XML ON .

Så här kör du en beräknad frågeplan:

  • I SSMS kan du använda Ctrl + L att göra detta. Eller så kan du klicka på Visa beräknad exekveringsplan ikonen, eller högerklicka i frågefönstret och välj Visa beräknad exekveringsplan . Detta kommer att spara dig från att behöva aktivera SHOWPLAN_XML på och av i din kod.
  • I Azure Data Studio kan du klicka på Förklara knappen ovanför frågefönstret.

Du kan också köra en faktisk frågeplan:

  • I SSMS, på Frågan klickar du på Inkludera faktisk exekveringsplan eller klicka på Inkludera faktisk exekveringsplan verktygsfältsknapp.
  • I Azure Data Studio, gå till Visa> Kommandopalett och skriv Kör aktuell fråga med faktisk plan .

Observera att om Inkludera faktisk utförandeplan väljs i SSMS, SET SHOWPLAN_XML ON option producerar inte XML Showplan-utdata. Testa att rensa Inkludera faktiska utförandeplan innan du använder denna SET alternativ.

Jag tycker dock att Azure Data Studio gör det motsatta SHOWPLAN_XML ON verkar åsidosätta Kör aktuell fråga med faktisk plan alternativet, förutom om jag kör Explain först (uppskattad frågeplan), varefter Kör aktuell fråga med faktisk plan fungerar plötsligt (Faktiska raderna och Faktiska exekveringar kolumner i Topoperationer flik returnerar lämplig data).

Det är förmodligen bäst att stänga av alternativet XML Showplan innan du använder andra metoder för att hämta frågeplanen.


  1. Introduktion till Väntestatistik

  2. Exekveringssekvens för Group By, Have and Where-klausul i SQL Server?

  3. Typkonvertering. Vad gör jag med ett PostgreSQL OID-värde i libpq i C?

  4. Kontrollera om strängen innehåller tecken med accent i SQL?