Оптимизация 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;Эти подзапросы направляются на сервера, где хранятся соответствующие таблицы, там они параллельно выполняются, результаты возвращаются серверу-оптимизатору, а от него - пользователю.
Физический план
Построение физического плана
При построении оптимального физического плана СУБД выполняет следующие действия:
|
|
- Последовательно строится множество физических планов на основе логического плана. Эти физические планы отличаются следующим:
- методом выбора записей из исходных таблиц (методом реализации подзапросов);
- порядком соединения промежуточных таблиц Qi (комбинация вариантов соединения нескольких таблиц);
- методом соединения таблиц (вложенными циклами, сортировкой слияния или ещё как);
- Для каждого физического плана оценивается его стоимость и выбирается план с наименьшей. В стоимости учитывается и процессорная составляющая, и составляющая времени ввода/вывода.
Методы выбора записей из исходной таблицы
Чтение всех записей и фильтрация
TableScan + Filter
Формула стоимости:
Cost Σ= CCPU + CIO
CCPU = T (R)⋅ Cfilter
CIO = B (R)⋅ CB
здесь:
T (R) - общее количество записей в таблице R;
B (R) - число физических блоков в таблице R;
Cfilter - среднее время фильтрации одной записи;
CB - время чтения/записи одного блока на диск.