W SQL Server możesz użyć SET SHOWPLAN_TEXT
instrukcja, aby zwrócić szczegółowe informacje o sposobie wykonania instrukcji T-SQL.
SHOWPLAN_TEXT
zwraca informacje jako zestaw wierszy, które tworzą hierarchiczne drzewo reprezentujące kroki podejmowane przez procesor zapytań SQL Server podczas wykonywania każdej instrukcji.
Jest podobny do SHOWPLAN_ALL
, ale zwraca mniej szczegółów. Dlatego jest skierowany do aplikacji, które nie radzą sobie z dodatkowymi szczegółami, które SHOWPLAN_ALL
zapewnia.
Możesz ustawić SHOWPLAN_TEXT
na ON
lub OFF
.
Kiedy SHOWPLAN_TEXT
jest ON
, wszystkie kolejne instrukcje T-SQL nie są wykonywane. Zamiast tego SQL Server zwraca informacje o wykonaniu instrukcji (bez jej wykonywania).
Przykład
Oto przykład do zademonstrowania.
SET SHOWPLAN_TEXT ON;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Pamiętaj, że SET SHOWPLAN_TEXT
nie można określić wewnątrz procedury składowanej i musi to być jedyna instrukcja w partii.
Oto, jak wygląda wynik w Azure Data Studio:
A oto jak to wygląda w mssql-cli (interfejs wiersza poleceń):
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 wyłączyć
Możesz go wyłączyć, używając SET SHOWPLAN_TEXT OFF
.
Gdy to zrobisz, kolejne instrukcje będą wykonywane normalnie.
SET SHOWPLAN_TEXT OFF;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Wynik:
Commands completed successfully. +---------+-----------+---------+-----------+-----------+ | CatId | CatName | DogId | DogName | GoodDog | |---------+-----------+---------+-----------+-----------| | 2 | Fluffy | 2 | Fluffy | 0 | +---------+-----------+---------+-----------+-----------+ (1 row affected) Commands completed successfully.
Przestarzałe czy nie?
Zgodnie z tym starym artykułem MSDN, SET SHOWPLAN_TEXT
jest zaplanowane do wycofania w przyszłych wersjach showplanu i zaleca się użycie SET SHOWPLAN_XML
zamiast tego.
Jednak ten artykuł MSDN dotyczy SQL Server 2008 R2 i kiedy to piszę, wydaje się, że nie został przestarzały w SQL Server 2019. W rzeczywistości aktualna dokumentacja nie wspomina o przestarzałości i nie jest uwzględniona kiedy uruchamiam listę przestarzałych pozycji w SQL Server.
Tak czy inaczej, prawdopodobnie warto mieć to na uwadze przed użyciem go w przyszłych wydaniach.
Graficzny plan wykonania
Jeśli używasz narzędzia graficznego, takiego jak SSMS lub Azure Data Studio, możesz mieć możliwość wyświetlenia szacowanego graficznego planu wykonania zapytania dla bieżącego zapytania.
- W SSMS możesz użyć Ctrl + L aby to zrobić. Możesz też kliknąć Wyświetl szacunkowy plan wykonania lub kliknij prawym przyciskiem myszy w oknie zapytania i wybierz Wyświetl szacunkowy plan wykonania .
- W Azure Data Studio możesz kliknąć Wyjaśnij przycisk nad oknem zapytania.
Możesz także użyć SET SHOWPLAN_XML ON
aby go włączyć, i SET SHOWPLAN_XML OFF
aby go wyłączyć.