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

SQL Server SHOWPLAN_ALL

V SQL Server můžete použít SET SHOWPLAN_ALL příkazu vrátit podrobné informace o tom, jak se příkaz T-SQL provádí, a také odhady požadavků na zdroje pro příkazy.

SHOWPLAN_ALL 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_TEXT , kromě SHOWPLAN_ALL vrací podrobnější informace (a je určen pro použití s ​​aplikacemi, které zvládnou jeho výstup).

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

Když SHOWPLAN_ALL 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).

Je důležité si uvědomit, že SHOWPLAN_ALL poskytuje odhady požadavků na zdroje a že skutečné požadavky na zdroje se mohou lišit, když je příkaz ve skutečnosti proveden.

Příklad

Zde je příklad k demonstraci.

SET SHOWPLAN_ALL ON;
GO

SELECT * FROM Cats;
GO

Všimněte si, že SET SHOWPLAN_ALL 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 takto to vypadá v mssql-cli (rozhraní příkazového řádku) při použití vertikálního výstupu:

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.

Existuje mnoho sloupců, takže jsem zde použil vertikální výstup, aby se to lépe četlo.

Pokud by byl můj dotaz složitější, vrátilo by se více řádků.

Zde je příklad (trochu) složitějšího dotazu.

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

Výsledek:

Jak to vypnout

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

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

SET SHOWPLAN_ALL OFF;
GO

SELECT * FROM Cats;
GO

Výsledek:

Commands completed successfully.
+---------+-----------+
| CatId   | CatName   |
|---------+-----------|
| 1       | Meow      |
| 2       | Fluffy    |
| 3       | Scratch   |
+---------+-----------+
(3 rows affected)
Commands completed successfully.

Zastaralé nebo ne?

Podle tohoto starého článku MSDN SET SHOWPLAN_ALL 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. 2 způsoby, jak zřetězit řetězce a čísla v MariaDB

  2. SYSDATETIME() Příklady v SQL Server (T-SQL)

  3. 5 tipů, jak udržet databázi v bezpečí

  4. Jak spustím PHP, které je uloženo v databázi MySQL?