План запроса - Query plan

План запроса (или запрос план выполнения ) представляет собой последовательность шагов , используемых для доступа к данным в SQL реляционной системы управления базами данных . Это частный случай концепции реляционной модели планов доступа.

Поскольку SQL является декларативным , обычно существует много альтернативных способов выполнения данного запроса, с широко варьируя производительность. Когда запрос отправляется в базу данных, оптимизатор запросов оценивает некоторые из различных, правильных возможных планов выполнения запроса и возвращает то, что он считает лучшим вариантом. Поскольку оптимизаторы запросов несовершенны, пользователям и администраторам баз данных иногда приходится вручную проверять и настраивать планы, созданные оптимизатором, для повышения производительности.

Создание планов запросов

Данная система управления базой данных может предлагать один или несколько механизмов для возврата плана для данного запроса. В некоторых пакетах есть инструменты, которые создают графическое представление плана запроса. Другие инструменты позволяют установить специальный режим для соединения, чтобы СУБД возвращала текстовое описание плана запроса. Другой механизм для получения плана запроса включает запрос таблицы виртуальной базы данных после выполнения запроса, который необходимо изучить. В Oracle, например, этого можно достичь с помощью оператора EXPLAIN PLAN.

Графические планы

Инструмент Microsoft SQL Server Management Studio , который поставляется с Microsoft SQL Server , например, показывает этот графический план при выполнении этого примера соединения двух таблиц с включенной образцовой базой данных:

SELECT *
FROM HumanResources.Employee AS e
    INNER JOIN Person.Contact AS c
    ON e.ContactID = c.ContactID
ORDER BY c.LastName

Пользовательский интерфейс позволяет исследовать различные атрибуты операторов, задействованных в плане запроса, включая тип оператора, количество строк, потребляемых или производимых каждым оператором, и ожидаемую стоимость работы каждого оператора.

Microsoft SQL Server Management Studio отображает пример плана запроса.

Текстовые планы

Текстовый план, приведенный для того же запроса на скриншоте, показан здесь:

StmtText
----
  |--Sort(ORDER BY:([c].[LastName] ASC))
       |--Nested Loops(Inner Join, OUTER REFERENCES:([e].[ContactID], [Expr1004]) WITH UNORDERED PREFETCH)
            |--Clustered Index Scan(OBJECT:([AdventureWorks].[HumanResources].[Employee].[PK_Employee_EmployeeID] AS [e]))
            |--Clustered Index Seek(OBJECT:([AdventureWorks].[Person].[Contact].[PK_Contact_ContactID] AS [c]),
               SEEK:([c].[ContactID]=[AdventureWorks].[HumanResources].[Employee].[ContactID] as [e].[ContactID]) ORDERED FORWARD)

Это указывает на то, что механизм запросов выполнит сканирование индекса первичного ключа в таблице Employee и поиск совпадений по индексу первичного ключа (столбец ContactID) в таблице контактов для поиска совпадающих строк. Результирующие строки с каждой стороны будут показаны оператору соединения вложенных циклов, отсортированы, а затем возвращены в качестве набора результатов для соединения.

Чтобы настроить запрос, пользователь должен понимать различные операторы, которые может использовать база данных, и какие из них могут быть более эффективными, чем другие, при этом обеспечивая семантически правильные результаты запроса.

Настройка базы данных

Просмотр плана запроса может предоставить возможности для новых индексов или изменений существующих индексов. Это также может показать, что база данных неправильно использует существующие индексы (см. Оптимизатор запросов ).

Настройка запроса

Оптимизатор запросов не всегда выбирает наиболее эффективный план запроса для данного запроса. В некоторых базах данных можно просмотреть план запроса, найти проблемы, а затем оптимизатор запросов даст подсказки, как его улучшить. В других базах данных можно попробовать альтернативы для выражения того же запроса (другие запросы, возвращающие те же результаты). Некоторые инструменты запросов могут генерировать встроенные подсказки в запросе для использования оптимизатором.

Некоторые базы данных, например Oracle, предоставляют таблицу планов для настройки запросов. Эта таблица плана вернет стоимость и время выполнения запроса. Oracle предлагает два подхода к оптимизации:

  1. CBO или оптимизация на основе затрат
  2. RBO или оптимизация на основе правил

RBO постепенно устаревает. Чтобы использовать CBO, необходимо проанализировать все таблицы, на которые ссылается запрос. Для анализа таблицы администратор баз данных может запустить код из пакета DBMS_STATS.

Другие инструменты для оптимизации запросов включают:

  1. Трассировка SQL
  2. Oracle Trace и TKPROF
  3. План выполнения Microsoft SMS (SQL)
  4. Запись производительности Tableau (все БД)

использованная литература