sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server SHOWPLAN_TEXT

I SQL Server kan du använda SET SHOWPLAN_TEXT uttalande för att returnera detaljerad information om hur en T-SQL-sats exekveras.

SHOWPLAN_TEXT returnerar information som en uppsättning rader som bildar ett hierarkiskt träd som representerar de steg som tas av SQL Server-frågeprocessorn när den exekverar varje sats.

Det liknar SHOWPLAN_ALL , förutom att det returnerar mindre detaljer. Det är därför riktat mot applikationer som inte kan hantera de extra detaljerna som SHOWPLAN_ALL ger.

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

När SHOWPLAN_TEXT ä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_TEXT ON;
GO

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

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

Så här ser resultatet ut i Azure Data Studio:

Och så här ser det ut i mssql-cli (kommandoradsgränssnitt):

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.

Hur man stänger av det

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

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

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.

Utfasad eller inte?

Enligt denna gamla MSDN-artikel, SET SHOWPLAN_TEXT är schemalagd för utfasning i framtida showplan-versioner, och det rekommenderas att du använder SET SHOWPLAN_XML istället.

Den MSDN-artikeln är dock för SQL Server 2008 R2, och när jag skriver detta verkar den inte ha blivit utfasad i SQL Server 2019. Faktum är att den aktuella dokumentationen inte nämner utfasning, och den ingår inte. när jag kör en lista över föråldrade objekt i SQL Server.

Hur som helst, det lönar sig förmodligen att ha detta i åtanke innan du använder det i framtida utgåvor.

Grafisk exekveringsplan

Om du använder ett grafiskt verktyg som SSMS eller Azure Data Studio kan du ha möjlighet att se den beräknade grafiska exekveringsplanen för den aktuella frågan.

  • 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 .
  • I Azure Data Studio kan du klicka på Förklara knappen ovanför frågefönstret.

Du kan också använda SET SHOWPLAN_XML ON för att aktivera det och SET SHOWPLAN_XML OFF för att inaktivera den.


  1. Databasalternativ/paketanvändningsrapportering

  2. ORACLE SQL:Fyll i saknade datum

  3. vad är ett bra sätt att horisontell shard i postgresql

  4. PostgreSQL Tuning:Viktiga saker för att driva prestanda