Интернет магазин китайских планшетных компьютеров



Компьютеры - План выполнения запроса - Слияние

23 января 2011


Оглавление:
1. План выполнения запроса
2. Слияние



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

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

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

Пример

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

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

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

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

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

Изучение планов выполнения запросов, созданных оптимизатором, позволяет решить, как ускорить выполнение запроса — изменить сам запрос или создать в базе данных дополнительный индекс. Некоторые СУБД позволяют явно влиять на то, как именно оптимизатор формирует план, для чего имеется особый язык подсказок.



Просмотров: 2067


<<< Оптимизация запросов СУБД
Представление (базы данных) >>>