Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Оптимизация SQL.doc
Скачиваний:
14
Добавлен:
29.08.2019
Размер:
1.7 Mб
Скачать
      1. Число кортежей, блоков и мощности атрибутов в соединении

Приведенные ниже формулы являются общими для всех рассмотренных выше методов (NLJ, SMJ и HJ).

1. Число кортежей в соединении.

(5.10)

2. Число блоков.

3. Мощности атрибутов:

а) мощность атрибута соединения ("а") в результирующей таблице

;

б) мощности остальных атрибутов (b)

Здесь T(Q1), T(Q2) – число кортежей в таблицах Q1 и Q2;

- оценка числа кортежей в таблице, полученной после соединения;

I(Qi,a) – мощность атрибута "а" в таблице Qi (i=1,2);

LJOIN – число кортежей соединения в одном блоке.

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

    1. Поиск физического плана с минимальной стоимостью

Для поиска оптимального физического плана используется один из алгоритмов динамического программирования.

      1. Алгоритм поиска для левостороннего дерева соединений

Вход: логический план выполнения SQL-запроса с таблицами R1, …, Rn (см. раздел 1.2).

Выход: квазиоптимальный физический план выполнения запроса.

//Алгоритм динамического программирования

ДЛЯ i=1,n

AccessPlan(Ri) //определение

КОНЕЦ ДЛЯ

ДЛЯ i=2,n

ДЛЯ всех подмножеств таких, что |P|=i

// |P| - количество таблиц в P

ДЛЯ всех таблиц

// определение метода соединения , дерево

// соединения таблиц (P – Qj) уже создано при выполнении

// предыдущих циклов

JoinPlan(P – Qj,Qj)

КОНЕЦ ДЛЯ

КОНЕЦ ДЛЯ

КОНЕЦ ДЛЯ

OptPlanReturn({Q1, …, Qn}) //вывод оптимального плана

//Конец алгоритма

      1. Формат экземпляра структуры данных

Алгоритм работает с массивом структур. Экземпляр структуры имеет следующий формат:

1. W – множество имен таблиц {Qi} таких, что W=XY, если |W| > 1, и W – имя таблицы Qi , если |W| = 1.

2. X – подмножество исходных таблиц {Qi}, которые использованы для получения левого аргумента соединения X Y.

3. Y – имя таблицы Qi, которая используется в качестве правого аргумента соединения X Y.

Примечание. Если W содержит имя только одной таблицы, т.е. |W| = 1, то X и Y – пустые поля.

4. Z – текущая стоимость выполнения плана, включающая стоимости выполнения подзапросов и промежуточных соединений, а также стоимость соединения X Y, если |W| > 1, или стоимость выполнения подзапроса, если |W| = 1.

5. ZIO – составляющая ввода-вывода в Z (CI/O).

6. V – опции:

1) T(W) – прогнозируемое число кортежей (записей) в таблице W (т.е. T(X Y), если |W| > 1, или T(Qi), если |W| = 1);

2) B(W) – прогнозируемое число блоков в W;

3) {I(W, Ai)}i – мощности атрибутов в W, по которым было выполнено или будет выполняться соединение;

4) к – идентификатор метода выбора записей из исходной таблицы (если |W| = 1) или метода соединения таблиц (если |W| > 1).

      1. Спецификации процедуры AccessPlan

Вход: Ri – имя исходной таблицы.

Выход: заполненный экземпляр структуры str[i].

Алгоритм.

// оценка стоимости выбора записей из Ri для различных методов:

// j=1 – чтение всей таблицы, j=2 – использование индекса.

ДЛЯ j=1,2

Cj = CCPUj + CI/Oj

// CCPUj и CI/Oj вычисляются с помощью формул (5.4) (для j=1)

// или с помощью формул (5.5) и (5.6) (для j=2).

КОНЕЦ ДЛЯ

// определение оптимального метода выбора записей из таблицы Ri,

// т.е. k{1,2}, заполнение экземпляра структуры str[i] (см. п. 1.7.2)

C=min (C1, C2) // здесь С=Сk

str[i] = {

{Qi}, Ø, Ø, // W, X, Y

C, CI/O k, // Z, ZIO

{T(Qi), B(Qi), {min{T(Qi), I(Ri, Aj)}j, k} // V

// для заполнения полей T(Qi), B(Qi) используются формулы

// пунктов 1.4.4 и 1.4.5

}

Конец алгоритма.