Как посмотреть план выполнения запроса в Microsoft SQL Server?

«Как посмотреть план выполнения запроса в Microsoft SQL Server?» — вопрос из категории Базы данных, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В SQL Server Management Studio (SSMS) есть несколько основных способов:

1. Графический план выполнения (наиболее наглядный):

  • Предполагаемый план (Estimated): Нажимаю Ctrl+L или кнопку "Display Estimated Execution Plan". Запрос не выполняется, план строится на основе статистики.
  • Фактический план (Actual): Включаю кнопку "Include Actual Execution Plan" (Ctrl+M), затем выполняю запрос. Во вкладке Execution plan отобразится реальный план с метриками времени и количества строк.

2. Текстовый/XML план:

  • Можно получить план в формате XML для детального анализа или сравнения.
    SET STATISTICS XML ON;
    GO
    SELECT * FROM Sales.Orders WHERE OrderDate > '2023-01-01';
    GO
    SET STATISTICS XML OFF;

На что смотрю в плане (сверху вниз, справа налево):

  • Стоимость операций (Relative Cost %): Выявляю наиболее дорогие узлы (жирные стрелки).
  • Тип доступа к данным: Index Seek (хорошо) vs Index/Table Scan (плохо, если таблица большая).
  • Key Lookup (RID Lookup): Указывает на недостающий покрывающий индекс.
  • Предупреждения: Жёлтые значки — например, "Missing Index", "Implicit Conversion".
  • Фактические vs Оцененные числа строк: Большое расхождение говорит о устаревшей статистике.
  • Дорогие операции: Sort, Hash Match (Join/Aggregate), Spool.

Для анализа исторических проблем использую системные представления: sys.dm_exec_query_stats и sys.dm_exec_query_plan.