stringtranslate.com

План запроса

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

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

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

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

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

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

Например, инструмент 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               

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ссылки

  1. ^ "SQL Trace". Microsoft.com . Microsoft . Получено 30 марта 2020 г. .
  2. ^ "Использование SQL Trace и TKPROF". Oracle.com . Получено 30 марта 2020 г. .
  3. ^ "Планы исполнения". Microsoft.com . Microsoft . Получено 30 марта 2020 г. .
  4. ^ "Оптимизация производительности рабочей книги". Tableau.com . Tableau Inc . Получено 30 марта 2020 г. .