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

SQL Server SHOWPLAN_TEXT

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.


  1. Liquibase lås - årsager?

  2. Konverter latin1-tegn på en UTF8-tabel til UTF8

  3. Sådan fungerer UUID() i MariaDB

  4. Hent værdier fra første og sidste række pr. gruppe