Лекция №10 - Логический и физический план запроса

 

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

Логический план

Порядок выполнения запроса на логическом уровне

Пример с предыдущей лекции: Πостаток(σR 1.н− c = R 2.н−с(Π R 1.н−с(σR 1.к−п=3(R 1))×Π R 2.н−с,остаток(σR 2.о>1500(R 2))))

Каждый из подзапросов - это промежуточные таблицы Q 1 и Q 2.

1)

2)

соединение Q 1 и Q 2 (естественное соединение):

Вот этот результат и передаётся от СУБД на рабочую станцию.

А теперь предположим, что таблицы R 1 и R 2 находятся на разных серверах. В этом случае, подзапросы Q 1 и Q 2 после оптимизации на сервере-оптимизаторе преобразуются в SELECT.

Q 1:

SELECT R1.ном.счFROM R1WHERE R1.код.польз = 3;

Q 2:

SELECT R2.ном.сч, R2.остFROM R2WHERE R2.ост > 1500;

Эти подзапросы направляются на сервера, где хранятся соответствующие таблицы, там они параллельно выполняются, результаты возвращаются серверу-оптимизатору, а от него - пользователю.

Физический план

Построение физического плана

При построении оптимального физического плана СУБД выполняет следующие действия:

  1. Последовательно строится множество физических планов на основе логического плана. Эти физические планы отличаются следующим:
    1. методом выбора записей из исходных таблиц (методом реализации подзапросов);
    2. порядком соединения промежуточных таблиц Qi (комбинация вариантов соединения нескольких таблиц);
    3. методом соединения таблиц (вложенными циклами, сортировкой слияния или ещё как);
  2. Для каждого физического плана оценивается его стоимость и выбирается план с наименьшей. В стоимости учитывается и процессорная составляющая, и составляющая времени ввода/вывода.

Методы выбора записей из исходной таблицы

Чтение всех записей и фильтрация

TableScan + Filter

Формула стоимости:

Cost Σ= CCPU + CIO

CCPU = T (R)⋅ Cfilter

CIO = B (R)⋅ CB

здесь:

T (R) - общее количество записей в таблице R;

B (R) - число физических блоков в таблице R;

Cfilter - среднее время фильтрации одной записи;

CB - время чтения/записи одного блока на диск.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: