Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server SHOWPLAN_TEXT

In SQL Server können Sie den SET SHOWPLAN_TEXT verwenden -Anweisung, um detaillierte Informationen darüber zurückzugeben, wie eine T-SQL-Anweisung ausgeführt wird.

SHOWPLAN_TEXT gibt Informationen als eine Reihe von Zeilen zurück, die eine hierarchische Struktur bilden, die die Schritte darstellt, die der SQL Server-Abfrageprozessor bei der Ausführung jeder Anweisung ausführt.

Es ähnelt SHOWPLAN_ALL , außer dass weniger Details zurückgegeben werden. Es richtet sich daher an Anwendungen, die die zusätzlichen Details von SHOWPLAN_ALL nicht verarbeiten können bietet.

Sie können SHOWPLAN_TEXT festlegen entweder auf ON oder OFF .

Wenn SHOWPLAN_TEXT ist ON , werden alle nachfolgenden T-SQL-Anweisungen nicht ausgeführt. Stattdessen gibt SQL Server Ausführungsinformationen für die Anweisung zurück (ohne sie auszuführen).

Beispiel

Hier ist ein Beispiel zur Veranschaulichung.

SET SHOWPLAN_TEXT ON;
GO

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

Beachten Sie, dass SET SHOWPLAN_TEXT kann nicht innerhalb einer gespeicherten Prozedur angegeben werden und muss die einzige Anweisung in einem Batch sein.

So sieht das Ergebnis in Azure Data Studio aus:

Und so sieht es in mssql-cli (Befehlszeilenschnittstelle) aus:

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.

Wie man es ausschaltet

Sie können es ausschalten, indem Sie SET SHOWPLAN_TEXT OFF verwenden .

Sobald Sie dies getan haben, werden nachfolgende Anweisungen wie gewohnt ausgeführt.

SET SHOWPLAN_TEXT OFF;
GO

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

Ergebnis:

Commands completed successfully.
+---------+-----------+---------+-----------+-----------+
| CatId   | CatName   | DogId   | DogName   | GoodDog   |
|---------+-----------+---------+-----------+-----------|
| 2       | Fluffy    | 2       | Fluffy    | 0         |
+---------+-----------+---------+-----------+-----------+
(1 row affected)
Commands completed successfully.

Veraltet oder nicht?

Laut diesem alten MSDN-Artikel SET SHOWPLAN_TEXT soll in zukünftigen Showplan-Versionen veraltet sein, und es wird empfohlen, dass Sie SET SHOWPLAN_XML verwenden stattdessen.

Dieser MSDN-Artikel bezieht sich jedoch auf SQL Server 2008 R2, und während ich dies schreibe, scheint er in SQL Server 2019 nicht veraltet zu sein. Tatsächlich erwähnt die aktuelle Dokumentation die Ablehnung nicht und ist nicht enthalten wenn ich eine Liste veralteter Elemente in SQL Server ausführe.

In jedem Fall lohnt es sich, dies zu berücksichtigen, bevor Sie es in zukünftigen Versionen verwenden.

Grafischer Ausführungsplan

Wenn Sie ein grafisches Tool wie SSMS oder Azure Data Studio verwenden, haben Sie möglicherweise die Möglichkeit, den geschätzten grafischen Abfrageausführungsplan für die aktuelle Abfrage anzuzeigen.

  • In SSMS können Sie Strg + L verwenden um dies zu tun. Oder Sie können auf Geschätzten Ausführungsplan anzeigen klicken oder klicken Sie mit der rechten Maustaste in das Abfragefenster und wählen Sie Geschätzten Ausführungsplan anzeigen aus .
  • In Azure Data Studio können Sie auf Erklären klicken Schaltfläche über dem Abfragefenster.

Sie können auch SET SHOWPLAN_XML ON verwenden um es zu aktivieren, und SET SHOWPLAN_XML OFF um es zu deaktivieren.