292
Глава
14.
Обобщенная
архитектура
СУБД
Поэтому
данный запрос будет эквивалентен следующей последовательности
операций
реляционной
алгебры:
R3
=
R1CR1.A
ОС а]
R4
«
R2ER2.B
С
Ь]
R5
=
R3*[ ]*R4
Хотя
немногие реляционные системы имеют языки запросов, основанные
в
чистом виде
на
реляционной
алгебре,
правила
преобразований
алгебраиче-
ских выражений
могут
быть полезны
и в
других
случаях.
Довольно
часто
реляционная
алгебра используется
в
качестве основы
внутреннего'представ-
ления
запроса. Естественно,
что
после этого можно выполнять
и
алгебраиче-
ские
преобразования.
В
частности, существуют подходы, связанные
с
преобразованием запросов
на
языке
SQL к
алгебраической
форме.
Особенно
важно
то, что
реляционная
алгебра более проста,
чем
язык SQL. Преобразование запроса
к
алгебраиче-
ской
форме упрощает
дальнейшие
действия оптимизатора
по
выборке опти-
мальных
планов.
Вообще говоря, развитый оптимизатор запросов
системы,
ориентированной
на
SQL,
должен
выявить
все
возможные планы
йыполне-
ния
любого запроса,
но
«пространство поиска» этих планов
в
общем случае
очень
велико;
в
каждом конкретном оптимизаторе используются свои эври-
стики
для
сокращения пространства
поиска.
Некоторые, возможно, наиболее
оптимальные планы никогда
не
будут
рассматриваться. Разумное
преобра-
зование
запроса
на SQL к
алгебраическому представлению сокращает
про-
странство поиска планов выполнения запроса
с
гарантией
того,
что
опти-
мальные
планы потеряны
не
будут.
Q
Приведение
запросов
с
вложенными
подзапросами
к
запросам
с
соедине-
ниями.
Основным отличием языка
SQL от
языка
реляционной
алгебры
явля-
ется возможность использовать
в
логическом
условии
выборки
предикаты»
содержащие
вложенные подзапросы. Глубина вложенности
не
ограничива-
ется
языком,
то
есть,
вообще
говоря,
может
быть
произвольной. Предикаты
с
вложенными подзапросами
при
наличии общего синтаксиса могут обладать
весьма различной семантикой.
Единственным
общим
для
всех
возможных
се-
мантик
вложенных подзапросов алгоритмом
выполнения
запроса является
вычисление
вложенного
подзапроса всякий
раз при
вычислении значения пре-
диката. Поэтому
естественно
стремиться
к
такому
преобразованию
запроса,
содержащего предикаты
со
вложенными подзапросами, которое сделает
се-
мантику
подзапроса более
явной,
предоставив
тем
самым
в
дальнейшем
оп-
тимизатору возможность выбрать способ выполнения
запроса,
наиболее точ-
но
соответствующий семантике подзапроса.
Каноническим
представлением
запроса
на
п-отношениях
называется запрос,
содержащий
п-1
предикат соединения
и не
содержащий предикатов
о
вло-
женными
подзапросами.
Фактически каноническая форма
- это
алгебраиче-
ское представление запроса.
Например, запрос
с
вложенным
подзапросом: