In SQL Server können Sie den SET SHOWPLAN_ALL
verwenden -Anweisung, um detaillierte Informationen darüber zurückzugeben, wie eine T-SQL-Anweisung ausgeführt wird, sowie Schätzungen der Ressourcenanforderungen für die Anweisungen.
SHOWPLAN_ALL
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_TEXT
, außer dass SHOWPLAN_ALL
gibt detailliertere Informationen zurück (und soll mit Anwendungen verwendet werden, die seine Ausgabe verarbeiten können).
Sie können SHOWPLAN_ALL
festlegen entweder auf ON
oder OFF
.
Wenn SHOWPLAN_ALL
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).
Beachten Sie unbedingt, dass SHOWPLAN_ALL
liefert Schätzungen der Ressourcenanforderungen und dass die tatsächlichen Ressourcenanforderungen abweichen können, wenn die Anweisung tatsächlich ausgeführt wird.
Beispiel
Hier ist ein Beispiel zur Veranschaulichung.
SET SHOWPLAN_ALL ON;
GO
SELECT * FROM Cats;
GO
Beachten Sie, dass SET SHOWPLAN_ALL
kann nicht innerhalb einer gespeicherten Prozedur angegeben werden und muss die einzige Anweisung in einem Stapel sein.
So sieht das Ergebnis in Azure Data Studio aus:
Und so sieht es in mssql-cli (Befehlszeilenschnittstelle) aus, wenn die vertikale Ausgabe verwendet wird:
Commands completed successfully. -[ RECORD 1 ]------------------------- StmtText | SELECT * FROM Cats; StmtId | 1 NodeId | 1 Parent | 0 PhysicalOp | NULL LogicalOp | NULL Argument | 1 DefinedValues | NULL EstimateRows | 3 EstimateIO | NULL EstimateCPU | NULL AvgRowSize | NULL TotalSubtreeCost | 0.0032853 OutputList | NULL Warnings | NULL Type | SELECT Parallel | 0 EstimateExecutions | NULL -[ RECORD 2 ]------------------------- StmtText | |--Clustered Index Scan(OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F])) StmtId | 1 NodeId | 2 Parent | 1 PhysicalOp | Clustered Index Scan LogicalOp | Clustered Index Scan Argument | OBJECT:([Test].[dbo].[Cats].[PK__Cats__6A1C8AFAB3EF1A8F]) DefinedValues | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName] EstimateRows | 3 EstimateIO | 0.003125 EstimateCPU | 0.0001603 AvgRowSize | 142 TotalSubtreeCost | 0.0032853 OutputList | [Test].[dbo].[Cats].[CatId], [Test].[dbo].[Cats].[CatName] Warnings | NULL Type | PLAN_ROW Parallel | 0 EstimateExecutions | 1 (2 rows affected) Commands completed successfully.
Es gibt viele Spalten, also habe ich hier eine vertikale Ausgabe verwendet, damit es einfacher zu lesen ist.
Wenn meine Abfrage komplexer wäre, würden mehr Zeilen zurückgegeben werden.
Hier ist ein Beispiel für eine (etwas) komplexere Abfrage.
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Ergebnis:
Wie man es ausschaltet
Sie können es ausschalten, indem Sie SET SHOWPLAN_ALL OFF
verwenden .
Sobald Sie dies getan haben, werden nachfolgende Anweisungen wie gewohnt ausgeführt.
SET SHOWPLAN_ALL OFF;
GO
SELECT * FROM Cats;
GO
Ergebnis:
Commands completed successfully. +---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+ (3 rows affected) Commands completed successfully.
Veraltet oder nicht?
Laut diesem alten MSDN-Artikel SET SHOWPLAN_ALL
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.