В SQL Server можете да използвате SET SHOWPLAN_TEXT
оператор за връщане на подробна информация за това как се изпълнява T-SQL оператор.
SHOWPLAN_TEXT
връща информация като набор от редове, които образуват йерархично дърво, представящо стъпките, предприети от процесора на заявки на SQL Server, докато изпълнява всеки израз.
Подобно е на SHOWPLAN_ALL
, с изключение на това, че връща по-малко подробности. Следователно е насочен към приложения, които не могат да се справят с допълнителните подробности, които SHOWPLAN_ALL
предоставя.
Можете да зададете SHOWPLAN_TEXT
до ON
или OFF
.
Когато SHOWPLAN_TEXT
е ON
, всички следващи T-SQL оператори не се изпълняват. Вместо това SQL Server връща информация за изпълнение на израза (без да го изпълнява).
Пример
Ето пример за демонстрация.
SET SHOWPLAN_TEXT ON;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Обърнете внимание, че SET SHOWPLAN_TEXT
не може да бъде посочен вътре в съхранена процедура и трябва да е единственият израз в партида.
Ето как изглежда резултатът в Azure Data Studio:
И ето как изглежда в mssql-cli (интерфейс на командния ред):
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.
Как да го изключим
Можете да го изключите, като използвате SET SHOWPLAN_TEXT OFF
.
След като направите това, следващите оператори ще се изпълняват нормално.
SET SHOWPLAN_TEXT OFF;
GO
SELECT * FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
GO
Резултат:
Commands completed successfully. +---------+-----------+---------+-----------+-----------+ | CatId | CatName | DogId | DogName | GoodDog | |---------+-----------+---------+-----------+-----------| | 2 | Fluffy | 2 | Fluffy | 0 | +---------+-----------+---------+-----------+-----------+ (1 row affected) Commands completed successfully.
Остаряло или не?
Съгласно тази стара статия в MSDN, SET SHOWPLAN_TEXT
е насрочено за оттегляне в бъдещи версии на showplan и се препоръчва да използвате SET SHOWPLAN_XML
вместо това.
Тази статия в MSDN обаче е за SQL Server 2008 R2 и докато пиша това, изглежда, че не е отхвърлена в SQL Server 2019. Всъщност текущата документация не споменава оттеглянето и не е включена когато стартирам списък с отхвърлени елементи в SQL Server.
Така или иначе, вероятно си струва да имате това предвид, преди да го използвате в бъдещи издания.
Графичен план за изпълнение
Ако използвате графичен инструмент като SSMS или Azure Data Studio, може да имате опцията да видите прогнозния план за изпълнение на графична заявка за текущата заявка.
- В SSMS можете да използвате Ctrl + L да го направя. Или можете да кликнете върху Показване на прогнозния план за изпълнение икона или щракнете с десния бутон в прозореца на заявката и изберете Показване на приблизителен план за изпълнение .
- В Azure Data Studio можете да щракнете върху Обяснение бутон над прозореца на заявката.
Можете също да използвате SET SHOWPLAN_XML ON
за да го активирате и SET SHOWPLAN_XML OFF
за да го деактивирате.