stringtranslate.com

План запроса

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

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

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

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

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

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

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

ВЫБЕРИТЕ * ИЗ HumanResources . Сотрудник AS e INNER JOIN Person . Свяжитесь с AS c ON e . КонтактID = c . ContactID В ПОРЯДКЕ ПО c . Фамилия               

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

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

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

Стмттекст---- |-- Сортировать ( ПОРЯДОК ПО : ( [ c ] . [ Фамилия ] ASC ))   |-- Вложенные циклы ( Внутреннее соединение , ВНЕШНИЕ ССЫЛКИ : ( [ e ] . [ ContactID ] , [ Expr1004 ] ) С НЕУпорядоченной предварительной выборкой )         |-- Сканирование кластеризованного индекса ( ОБЪЕКТ : ( [ AdventureWorks . [ HumanResources ] . [ Сотрудник ] . [ PK_Employee_EmployeeID ] AS [ e ] ) )     |-- Поиск по кластерному индексу ( ОБЪЕКТ : ( [ AdventureWorks . [ Человек ] . [ Контакт ] . [ PK_Contact_ContactID ] AS [ c ] ) ,     ПОИСК :( [ c ] . [ ContactID ]=[ AdventureWorks ] . [ HumanResources ] . [ Сотрудник ] . [ ContactID ] как [ e ] . [ ContactID ] ) ЗАКАЗАТЬ ВПЕРЕД )    

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

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

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

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

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

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

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

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

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

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

  1. SQL-трассировка [1]
  2. Oracle Trace и TKPROF [2]
  3. План выполнения Microsoft SMS (SQL) [3]
  4. Запись производительности в таблице (все базы данных) [4]

Рекомендации

  1. ^ «Трассировка SQL». Microsoft.com . Майкрософт . Проверено 30 марта 2020 г.
  2. ^ «Использование SQL Trace и TKPROF» . Oracle.com . Проверено 30 марта 2020 г.
  3. ^ «Планы выполнения». Microsoft.com . Майкрософт . Проверено 30 марта 2020 г.
  4. ^ «Оптимизация производительности книги» . Табло.com . Табло Инк . Проверено 30 марта 2020 г.