Магия сохраняет силу


Определения - часть 3


При применении метода магических множеств эта оптимизация достигается путем определения магической таблицы (M3) и перезаписи D1 и D2 как M1 и M2.

(Ml): SELECT Ename FROM emp, dep_avgsalbf

WHERE Job = 'Sr Programmer' AND Sal > Asal AND emp.Dno = dep_avgsalbf.Dno

(M2): dep_avgsalbf(Dno, Asal) AS (SELECT DUO, AVG(Sa1) FROM m_dep_avgsalbf, emp WHERE m_dep_avgsalbf.Dno = emp.Dno GROUPBY Dno)

(M3): m_dep_avgsalbf(Dno) AS (SELECT DISTINCT Dno FROM emp WHERE Job = 'Sr Programmer')

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

Вспомогательные магические множества: В магическом запросе примера 3.1 предикат Job = 'Sr Programmer' повторяется в операторах M1 и M3. В программе S из примера 2.1 результат выборки сохранялся в s_mag и использовался как общее подвыражение при вычислении Sl и S3. Таблицы, подобные в s_mag, называются дополнительными магическими множествами. Программа D преобразуется в программу S с использованием дополнительных преобразований методом магических множеств ([BR87]). Мы используем дополнительные магические множества в разд. 6, потому что использование общих подвыражений существенно влияет на эффективность. Для простоты объяснений в других разделах мы используем просто магические множества.

SIPS: Sideways Information Passing Strategy определяет решение о том, как передавать информацию сторонним образом в теле табличного выражения при его вычислении. Передаваемая информация поступает из предикатов табличного выражения. SIPS определяется формально в [BR87, MFPR90].

SIPS может быть полной (в том смысле, что все подходящие предикаты используются настолько рано, насколько это возможно) или частичной. Полная SIPS может определяться путем упорядочения таблиц в разделе FROM.


Начало  Назад  Вперед