sql >> Databáze >  >> RDS >> Sqlserver

SQL Server SHOWPLAN_TEXT

V SQL Server můžete použít SET SHOWPLAN_TEXT příkaz vrátit podrobné informace o tom, jak se příkaz T-SQL provádí.

SHOWPLAN_TEXT vrací informace jako sadu řádků, které tvoří hierarchický strom představující kroky provedené procesorem dotazů SQL Server při provádění každého příkazu.

Je to podobné jako SHOWPLAN_ALL , kromě toho, že vrací méně podrobností. Je proto zaměřen na aplikace, které nedokážou zpracovat další detaily, které SHOWPLAN_ALL poskytuje.

Můžete nastavit SHOWPLAN_TEXT buď ON nebo OFF .

Když SHOWPLAN_TEXT je ON , nebudou provedeny všechny následující příkazy T-SQL. Místo toho SQL Server vrátí informace o provedení příkazu (aniž by jej provedl).

Příklad

Zde je příklad k demonstraci.

SET SHOWPLAN_TEXT ON;
GO

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

Všimněte si, že SET SHOWPLAN_TEXT nelze zadat uvnitř uložené procedury a musí to být jediný příkaz v dávce.

Takto vypadá výsledek v Azure Data Studio:

A takhle to vypadá v mssql-cli (rozhraní příkazového řádku):

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.

Jak to vypnout

Můžete jej vypnout pomocí SET SHOWPLAN_TEXT OFF .

Jakmile to uděláte, následující příkazy se provedou jako obvykle.

SET SHOWPLAN_TEXT OFF;
GO

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

Výsledek:

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

Zastaralé nebo ne?

Podle tohoto starého článku MSDN SET SHOWPLAN_TEXT je naplánováno ukončení podpory v budoucích verzích showplanu a je doporučeno použít SET SHOWPLAN_XML místo toho.

Tento článek MSDN je však pro SQL Server 2008 R2, a když toto píšu, nezdá se, že by byl v SQL Server 2019 zastaralý. Ve skutečnosti se v aktuální dokumentaci o ukončení podpory vůbec nemluví a není zahrnuta. když spustím seznam zastaralých položek na serveru SQL.

Ať tak či onak, pravděpodobně se vyplatí na to pamatovat před použitím v budoucích verzích.

Grafický plán provádění

Pokud používáte grafický nástroj, jako je SSMS nebo Azure Data Studio, možná budete mít možnost zobrazit odhadovaný plán provádění grafického dotazu pro aktuální dotaz.

  • V SSMS můžete použít Ctrl + L udělat toto. Nebo můžete kliknout na Zobrazit odhadovaný plán provedení nebo klikněte pravým tlačítkem v okně dotazu a vyberte Zobrazit plán odhadovaného provedení .
  • V Azure Data Studio můžete kliknout na Vysvětlit tlačítko nad oknem dotazu.

Můžete také použít SET SHOWPLAN_XML ON pro jeho aktivaci a SET SHOWPLAN_XML OFF jej zakázat.


  1. T-SQL úterý #64:Jeden spouštěč nebo mnoho?

  2. Jak nainstalovat nejnovější verzi Sqlite aar při používání Room On Android

  3. Jak získat vícenásobné počty s jedním dotazem v MySQL

  4. Mechanismy pro sledování změn schématu DB