План запроса

План запроса

План выполне́ния запро́са — последовательность операций, необходимых для получения результата реляционной СУБД.

План в целом разделяется на две стадии:

  • Выборка результатов;
  • Сортировка и группировка, выполнение агрегаций.

Сортировка и группировка — это опциональная стадия, которая выполняется, если не найдено путей доступа для получения результата в запрошенном порядке.

Выборка результатов выполняется следующими способами:

  • Вложенные циклы;
  • Слияние.

Содержание

Вложенные циклы

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

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

Циклы могут вкладываться произвольное число раз. В этом случае внутренний цикл становится внешним для следующего цикла и т. д.

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

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

Слияние

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

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

За счет того, что в индексах данные отсортированы, слияние дешевле вложенных циклов, но план выполнения не может не начинаться со слияния.

Пример

Например, для такого запроса, как

SELECT 
  FROM Продажи
  ORDER BY Номер_продавца

может быть создан такой план выполнения:

  1. Сканирование кластерного индекса для первичного ключа таблицы Продажи.
  2. Сортировка результатов шага 1 по столбцу Номер_продавца.
  3. Возврат приложению результатов шага 2.

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

Изучение планов выполнения запросов, созданных оптимизатором, позволяет решить, как ускорить выполнение запроса — изменить сам запрос или создать в базе данных дополнительный индекс.

См. также

Оптимизация запросов

Кэш запросов

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Нужно сделать НИР?

Полезное


Смотреть что такое "План запроса" в других словарях:

  • План выполнения запроса — План выполнения запроса  последовательность операций, необходимых для получения результата SQL запроса в реляционной СУБД. План в целом разделяется на две стадии: Выборка результатов; Сортировка и группировка, выполнение агрегаций.… …   Википедия

  • План ФСС — (План Фиксированной Спутниковой Службы) принятый в 1988 году международный стандарт частотных выделений для различных стран. Так для СССР на трех орбитальных позициях 61Е, 88.1Е, 138.5Е с параметрами, обеспечивающими обслуживание территории СССР …   Википедия

  • SQLJ — SQLJ  подмножество стандарта SQL, направленное на объединение преимуществ синтаксиса языков SQL и Java ради удобства реализации бизнес логики и работы с данными. Данный стандарт разработан консорциумом, состоящим из компаний IBM, Micro Focus …   Википедия

  • Sqlj — подмножество стандарта Java ради удобства реализации бизнес логики и работы с данными. Данный стандарт разработан консорциумом, состоящим из компаний Microsoft, Informix, Oracle, Sun и Содержание 1 Предыстория 2 Пример кода 3 SQLJ и JDBC 4… …   Википедия

  • Подсказка в SQL-запросе — Подсказка в SQL запросе, иначе Хинт (англ. Hint)  средство языка запросов, позволяющее явным образом влиять на план запроса. Сам SQL запрос содержит указание, какую информацию необходимо получить из БД, но не содержит указаний, каким образом …   Википедия

  • Оптимизация запросов СУБД — Оптимизация запросов  это 1) функция СУБД, осуществляющая поиск оптимального плана выполнения запросов из всех возможных для заданного запроса, 2) процесс изменения запроса и/или структуры БД с целью уменьшения использования вычислительных… …   Википедия

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

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

  • Кеш запросов (СУБД) — Кеш запросов в СУБД  это область оперативной или внешней памяти, хранящей план выполнения, соответствующий запросу с определённой семантикой. Кеш запросов используется для уменьшения времени ответа СУБД для часто используемых запросов. План… …   Википедия

  • Кэш запросов (СУБД) — Кэш запросов в СУБД  это область оперативной или внешней памяти, хранящей план выполнения, соответствующий запросу с определённой семантикой. Кэш запросов используется для уменьшения времени ответа СУБД для часто используемых запросов. План… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»