Скачиваний:
82
Добавлен:
02.05.2014
Размер:
2.28 Mб
Скачать

17.4. Преобразование выражений

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

Конечно, читатель должен понимать, что в результате применения к какому-либо вы- ражению одного правила преобразования может быть получено выражение, к которому применимо другое правило преобразования. Например, среди исходных запросов нечас- то встречаются запросы, сформулированные с использованием двух последовательно выполняемых операций проекции (речь об этом пойдет ниже; см. второе правило из под- раздела об операциях выборки и проекции). Однако при преобразовании запросов по- добные выражения достаточно часто возникают как результат применения других пра- вил преобразования. (В этом смысле очень важным случаем является обработка пред- ставлений. Например, рассмотрим запрос "Выбрать все названия городов в представле- нии V", где представление V определено как проекция переменной-отношения поставщи- ков по атрибутам Si и CITY.) Иначе говоря, начиная с исходного выражения, оптимиза- тор будет шаг за шагом применять различные правила преобразования до тех пор, пока не будет получено выражение, которое согласно встроенным в оптимизатор эвристиче- ским правилам будет считаться "оптимальным" для рассматриваемого запроса.

Выборки и проекции

Начнем с правил преобразования, которые включают только операции выборки и проекции.

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

( A WHERE <выборка1> ) WHERE <вы6орка2>

эквивалентно выражению

A WHERE <выборка1> AND <выборка2>

2. В последовательности операций проекций для одного и того же отношения можно игнорировать все проекции, кроме последней. Таким образом, выражение

( А { <проекция1> } ) { <проекция2> }

эквивалентно выражению

А { <проекция2> }

Конечно, чтобы исходное выражение имело смысл, каждый атрибут, присутст- вующий в проекции <проекцня2>, обязательно должен присутствовать и в проек- ции <проекция1>.

3. Операцию выборки из результата операции проекции можно преобразовать в опе- рацию проекции для результата операции выборки. Например, выражение

( А { <проекция> } ) WHERE <вы6орка>

эквивалентно выражению

( A WHERE <выборка> ) { <проекщя> }

Обратите внимание, что, как правило, операцию выборки целесообразно выполнять перед операцией проекции, поскольку операция выборки обычно приводит к уменьшению объема тех данных, которые будут являться входными для операции проекции. Следовательно, в этом случае уменьшается количество данных, которые потребуется сортировать для исключения возможных дублирующихся записей, об- разующихся в процессе выполнения операции проекции.

Распределительный закон

Правило преобразования, которое использовано в примере, приведенном выше, в разделе 17.2 (преобразование операции соединения с последующей операцией выборки в операцию выборки с последующей операцией соединения), на самом деле является част- ным случаем более общего правила, называемого распределительным законом. Говорят, что унарный оператор f распределяется по бинарной операции О тогда и только тогда, когда для всех Л и В выполняется следующее тождество.

i(AOB)=t(A)Ot(B)

Например, в обычной арифметике операция SQRT (извлечение квадратного корня) распределяется по операции умножения, так как для всех А и В выполняется приведенное ниже тождество.

SQRT ( А * В ) е SQRT ( Л ) * SQRT ( В )

Следовательно, выполняя преобразование выражений, оптимизатор арифметических выражений всегда может заменить одну часть этого равенства другой. В качестве обрат- ного примера можно привести утверждение, что операция SQRT не распределяется по операции сложения, так как в большинстве случаев квадратный корень из суммы А + В не равен сумме квадратных корней из Л и В.

В реляционной алгебре операция выборки распределяется по операциям объедине- ния, пересечения и вычитания. Она также распределяется по операции соединения, но лишь тогда и только тогда, когда условие операции выборки состоит (в самом сложном случае) из двух отдельных условий, соединенных операцией AND — по одному условию выборки для каждого операнда операции соединения. Для примера, рассматриваемого в разделе 17.2, сформулированное выше условие соблюдено (условие выборки очень про- стое и относится лишь к одному из операндов), благодаря чему стало возможным при- менить распределительный закон для замены рассматриваемого в примере выражения его более эффективным эквивалентом. Благодаря этому закону операция выборки была выполнена раньше остальных операций. Предварительное выполнение операций выбор-

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

Ниже приведено несколько примеров более специфических случаев применения рас- пределительного закона, на этот раз для операции проекции. Во-первых, операция про- екции распределяется по операциям объединения и пересечения (но не по операции вычитания).

( A UNION В){С}=А{С} UNION В { С }

( A INTERSECT В){С}=А{С} INTERSECT В { С }

Здесь А и В должны иметь одинаковые типы. Во-вторых, эта операция также распре- деляется по операции соединения, т.е. тождество

( A JOIN В ) { С } s ( А { АС } ) JOIN ( В { ВС } )

справедливо, но только в том случае, если:

  • множество АС является объединением общих атрибутов отношений А и В, плюс те атрибуты из множества С, которые имеются только в отношении А;

  • множество ВС является объединением общих атрибутов отношений А и В, плюс те атрибуты из множества С, которые имеются только в отношении В.

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

Коммутативность и ассоциативность

Законы коммутативности и ассоциативности являются двумя еще более важными и общими правилами преобразования. Говорят, что бинарная операция О является ком- мутативной тогда и только тогда, когда для всех А и В истинно следующее тождество.

А О В ш В О А

Например, в обычной арифметике операции умножения и сложения являются комму- тативными, а операции деления и вычитания — нет. В реляционной алгебре коммута- тивными являются операции объединения, пересечения и соединения, а операции вы- читания и деления таковыми не являются. Например, если запрос включает соединение двух отношений, А и В, то коммутативность означает, что безразлично, какое из отноше- ний А и В выбрано в качестве "внешнего" или "внутреннего". Следовательно, при вычис- лении данного объединения системе предоставлено право выбора в качестве "внешнего", например, меньшего из двух отношений (см. раздел 17.7).

Перейдем к ассоциативности. Принято считать, что бинарная операция О является ассоциативной, если для всех А, Ви С истинно следующее тождество.

АО{ВОС) = (АОВ)ОС

Например, в обычной арифметике произведение и сложение — ассоциативные опе- рации, а деление и вычитание— нет. В реляционной алгебре ассоциативными являются операции объединения, пересечения и соединения, а операции вычитания и деления таковыми не являются. Так, например, если в запросе используется соединение трех от-

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

Идемпотентность

Еще одним важным общим правилом является закон идемпотентности. Бинарную операцию О называют идемпотентной тогда и только тогда, когда для любого Л выпол- няется следующее тождество.

А О A s Л

Можно ожидать, что применение закона идемпотентности окажется полезным в про- цессе преобразования выражений. В реляционной алгебре операции объединения, пересе- чения и соединения являются идемпотентными, а операции деления и вычитания — нет.

Вычисляемые скалярные выражения

Объектом применения законов трансформации являются не только реляционные вы- ражения. Например, выше уже упоминалось, что некоторые законы трансформации при- менимы и к арифметическим выражениям. Вот конкретный пример. Вследствие того, что операция умножения "*" распределяется по операции сложения "+", выражение

Л * В + А * С

можно трансформировать в выражение

Л * j В + С )

Оптимизатор реляционных выражений должен знать о возможности подобных пре- образований, так как ему приходится иметь дело с вычисляемыми скалярными выраже- ниями в контексте операций EXTEND и SUMMARIZE.

Следует отметить, что приведенный выше пример иллюстрирует несколько более общую форму распределительного закона. Выше было дано определение понятия рас- пределяемое™ по отношению к унарным операциям, распределяемым по бинарным опе- рациям. Однако в данном случае обе операции, "*" и "+", являются бинарными. Говорят, что бинарная операция 8 распределяется по бинарной операции О, если для всех А, В и С истинно равенство

Л5(ВОС) = (Л5В)0(Л5С)

(в приведенном выше арифметическом примере 5 представляет операцию "*", а О — операцию "+").

Логические выражения

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

А > В AND В > 3

абсолютно эквивалентно выражению А > В AND В > 3 AND А > 3

и потому может быть преобразовано в это выражение.

Данная эквивалентность базируется на том основании, что операция ">" является транзитивной. Заметьте, что подобное преобразование весьма полезно, так как позволя- ет системе выполнить дополнительную операцию выборки (по А) до выполнения "больше чем"-соединения, заданного условием А > В. Повторим сказанное выше. Пред- варительное выполнение операций выборки чаще всего оправдывает себя, следовательно, будет полезной и способность системы логически выводить предвари- тельные операции выборки (что и было реализовано в данном примере).

Замечание. Этот прием реализован в различных коммерческих продуктах, включая СУБД DB2 (в которой его называют транзитивным замыканием предикатов), а также СУБД INGRES.

Вот еще один пример. Вследствие того, что операция OR распределяется по операции AND, логическое выражение

А > В OR ( С = D AND Е < F )

можно преобразовать в выражение

( А > В OR С = D ) AND ( А > В OR Е < F )

Этот пример демонстрирует другой общий закон: "Любое условие может быть пре- образовано в эквивалентное условие, называемое конъюнктивной нормальной фор- мой (КНФ)". Выражение в КНФ в общем случае имеет следующий вид.

CI AND С2 AND ... AND Сп

Здесь CI, С2,Сп— это логические выражения (называемые конъюнктами), в которых не используется логическая операция AND. Преимущество КНФ состоит в том, что выражение в КНФ истинно только в том случае, если истинны все его конъюнкты. И наоборот, выраже- ние в КНФ ложно, если ложь является результатом вычисления хотя бы одного конъюнкта. Так как логическая операция AND коммутативна (выражение A AND В эквивалентно выраже- нию BAND А), оптимизатор может вычислять отдельные конъюнкты в любом порядке, в част- ности по возрастанию их сложности (начиная с самых простых). Как только будет найден конъюнкт, результатом вычисления которого является ложь, процесс вычисления выражения в КНФ можно будет прекратить. Более того, в системах с параллельной обработкой возможно параллельное вычисление каждого из конъюнктов [ 17.58]—[ 17.61 ]. Опять же, как только будет найден первый конъюнкт, результатом вычисления которого является значение ложь, про- цесс вычисления выражения в КНФ можно будет прекратить.

Из сказанного выше следует, что оптимизатор должен знать, как общие свойства, та- кие как распределенность, применяются не только к реляционным операциям, но и к операторам сравнения, например ">", к логическим операторам, например AND и OR, к арифметическим операторам, например "+", и т.п.

Семантические преобразования

Рассмотрим следующее выражение. ( SP JOIN S ) { Pi }

Данное соединение относится к соединениям типа внешний ключ — соответствующий потенциальный ключ. В нем внешнему ключу в переменной-отношении SP ставится в соот- ветствие потенциальный ключ в переменной-отношении S. Следовательно, каждый кортеж в переменной-отношении SP связан с определенным кортежем в переменной-отношении S. Таким образом, из каждого кортежа в переменной-отношении SP в общий результат посту- пает только значение атрибута Р|. Другими словами, соединение можно вообще не выпол- нять! Рассматриваемое выражение можно заменить следующим выражением.

SP { Р| }

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

Преобразование, которое является корректным только в силу конкретного установ- ленного ограничения целостности, называют семантическим преобразованием [17.27], а оптимизацию, достигаемую в результате подобных преобразований, — семантической оптимизацией. Семантическую оптимизацию можно определить как процесс преобра- зования одного запроса в другой, качественно отличный запрос, который, тем не менее, дает результат, идентичный результату исходного запроса, благодаря тому, что обраба- тываемые данные удовлетворяют определенному ограничению целостности.

Важно понимать, что, в принципе, любое ограничение целостности может быть ис- пользовано для семантической оптимизации. Другими словами, этот прием не ограничен использованием только ограничений целостности. Например, предположим, что в базе данных поставщиков и деталей установлено ограничение, утверждающее, что все крас- ные детали должны храниться в Лондоне. Рассмотрим следующий запрос.

Определить всех поставщиков только красных деталей, которые (поставщики) на- ходятся в том же городе, где хранится хотя бы одна поставляемая ими деталь.

Это довольно сложный запрос! Но в силу рассмотренного ограничения целостности его можно привести к такому виду.

Определить всех поставщиков из Лондона, поставляющих только красные детали.

Замечание. Насколько известно автору, лишь немногие современные коммерческие продукты в должной мере используют идею семантической оптимизации. Однако, в принципе, семантическая оптимизация способна обеспечивать значительное улучшение производительности (весьма вероятно, намного превышающее то, которое в настоящее время может быть достигнуто с помощью любых традиционных приемов оптимизации). Более подробно идея семантической оптимизации изложена в [17.16], [17.28]—[ 17.30] и особенно — в [17.27].

Заключительные замечания

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

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]