Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как SHOWPLAN_XML работи в SQL Server

В SQL Server можете да използвате SET SHOWPLAN_XML оператор за връщане на подробна информация за това как ще бъде изпълнен T-SQL оператор под формата на добре дефиниран XML документ.

Подобно е на SHOWPLAN_ALL , с изключение на това SHOWPLAN_ALL връща своя набор от данни от редове, които образуват йерархично дърво.

Можете да зададете SHOWPLAN_XML до ON или OFF .

Когато SHOWPLAN_XML е ON , всички следващи T-SQL оператори не се изпълняват. Вместо това SQL Server връща информация за изпълнение на израза (без да го изпълнява).

Пример

Ето пример за демонстрация.

SET SHOWPLAN_XML ON;
GO

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

Обърнете внимание, че SET SHOWPLAN_XML не може да бъде посочен в съхранена процедура и трябва да бъде единственият израз в пакет.

Резултатът, който получавате, може да зависи от това кой инструмент използвате за достъп до SQL Server.

Когато стартирам това в Azure Data Studio, мога да щракна върху различните раздели, за да получа различен изглед на резултата.

Резултатите Разделът показва необработения XML низ:

Щракването върху реда отваря XML документа в нов раздел:

Планът за заявки Tab показва графично представяне на резултата:

Най-важните операции Разделът представя данните в табличен формат, който ви позволява да сортирате данните по различни показатели:

Не работи?

Ако не работи за вас, уверете се, че Включете действителен план за изпълнение не е избрано в SSMS. Когато това е избрано, SET SHOWPLAN_XML ON не произвежда XML Showplan изход.

Как да го изключим

Можете да го изключите, като използвате SET SHOWPLAN_XML OFF .

След като направите това, следващите оператори ще се изпълняват нормално.

SET SHOWPLAN_XML 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.

План за изпълнение в GUI

Ако използвате графичен инструмент като SSMS или Azure Data Studio, може да имате опция за пряк път за преглед на прогнозния план за изпълнение на графична заявка. Това ви позволява да видите плана на заявката, без да е необходимо да изпълнявате SET SHOWPLAN_XML ON .

За да изпълните прогнозен план за заявка:

  • В SSMS можете да използвате Ctrl + L да го направя. Или можете да кликнете върху Показване на прогнозния план за изпълнение икона или щракнете с десния бутон в прозореца на заявката и изберете Показване на приблизителен план за изпълнение . Това ще ви спести от необходимостта да обръщате SHOWPLAN_XML включване и изключване във вашия код.
  • В Azure Data Studio можете да щракнете върху Обяснение бутон над прозореца на заявката.

Можете също да стартирате действителен план за заявка:

  • В SSMS, в Заявката щракнете върху Включи действителен план за изпълнение или щракнете върху Включи действителен план за изпълнение бутон на лентата с инструменти.
  • В Azure Data Studio отидете на Изглед> Командна палитра и въведете Изпълнение на текущата заявка с действителен план .

Имайте предвид, че ако Включете действителен план за изпълнение е избран в SSMS, SET SHOWPLAN_XML ON опцията не произвежда XML Showplan изход. Опитайте да изчистите Включи действителен план за изпълнение преди да използвате този SET опция.

Въпреки това откривам, че Azure Data Studio прави обратното SHOWPLAN_XML ON изглежда отменя Изпълнение на текуща заявка с действителен план опция, освен ако стартирам Explain първо (приблизителен план за заявка), след което Изпълнете текущата заявка с действителен план изведнъж работи (Действителните редове и Действително изпълнение колони на Водещи операции раздел връща съответните данни).

Вероятно е най-добре да изключите опцията XML Showplan, преди да използвате други методи за извличане на плана на заявката.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Кеширане на временни обекти на SQL Server

  2. Как да премахнете водещите и крайните празни пространства в SQL Server – TRIM()

  3. Възможно ли е да се изберат данни на sql сървъра, като се използва редната позиция на колоната

  4. Кой е най-добрият начин да се изпише с главни букви първата буква на всяка дума в низ в SQL Server

  5. Как мога да премахна дублиращи се редове?