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.