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

Порядок построения:

  1. запрос преобразуется в формулу реляционной алгебры;
  2. выполняется преобразование (оптимизация) этой формулы.

Оператор SELECT (без агрегирования, группирования и удаления дубликатов) может быть представлен так:

Π A (σF (R 1×...× Rn)), где

от R 1 до Rn - это декартово произведение отношений (таблиц), указанных за ключевым словом FROM;

σF - это селекция кортежей декартова произведения в соответствии с условием, указанным за ключевым словом WHERE;

Π A - это проекция селекции на множество атрибутов A, указанных за ключевым словом SELECT

В чём суть такой логической оптимизации? Сначала надо выполнить декартово произведение, потом селекцию, потом проекцию - всё по порядку скобок в этом выражении. Потому что если таблица имеет большой размер, то это выражение будет выполняться очень долго.

Пример: найти фамилии поставщиков, поставляющих детали с названием "винт".

ρ =(S, P, SP)

SELECT фамилия

FROM S, P, SP

WHERE P.название = 'винт' AND

S.номер_поставки = SP.номер_поставки AND

SP.номер_детали = P.номер_детали;

Πфамилия(σP. н="винт"∧ S. н−п= SP. н−п∧ SP. н−д= P. н−д(S × P × SP))

После преобразования и выделения подзапросов (как в описании, приведённом выше) получится выражение Π A (σFAi (σf 2(R 1))×...×Π An (σfn (Rn)))), которое можно представить в графическом виде - это и будет логический план выполнения запроса:

Получается, подзапросы можно выполнять параллельно, а это тоже уменьшает время выполнения всего запроса.

Пример:

Запрос найти значение остатков больше 1500 на счетах пользователя с кодом 3:

SELECT остаток

FROM R2

WHERE остаток > 1500 AND

номер_счёта IN(

                SELECT номер_счёта

                FROM R1

                WHERE код_пользователя = 3

              );

Этот запрос преобразуется сервером в неявном виде в формулу реляционной алгебры:

Πостаток(σR 2.о>1500∧ R 1.к−п=3∧ R 1.н− c = R 2.н−с(RR 2))

Теперь оптимизируем:

=4Πостаток(σR 1.н− c = R 2.н−с(σR 2.о>1500∧ R 1.к−п=3(RR 2)))=6

=Πостаток(σR 1.н− c = R 2.н−с(σR 1.к−п=3(R 1)× σR 2.о>1500(R 2)=5,2

=Πостаток(σR 1.н− c = R 2.н−с(Πостаток, R 1.н−с, R 2.н−с(σR 1.к−п=3(R 1)× σR 2.о>1500(R 2))=9

=Πостаток(σR 1.н− c = R 2.н−с(Π R 1.н−с(σR 1.к−п=3(R 1))×Π R 2.н−с,остаток(σR 2.о>1500(R 2))))

Полученное выражение - результат оптимизации. Можно построить логический план выполнения запроса.


 



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



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