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


Корреляция и декорреляция - часть 2


(D2): dep_avgsal(Dno, Asal) AS (SELECT Dno, AVG(Sa1) FROM emp GROUPBY Dno)

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

В подходе магических множеств объединяются достоинства методов корреляции и декорреляции, хотя и не бесплатно. После преобразования запроса C методом магических множеств мы получим следующий магический запрос S:

(Sl): SELECT Ename FROM s_mag, mag_avgsal WHERE Sal > Asal AND s_mag.Dno = mag_avgsal.Dno

(S2): mag_avgsal(Dno, Asal) AS (SELECT Dno, AVG(Sa1) FROM mag, emp WHERE mag.Dno = emp.Dno GROUPBY Dno)

(S3): mag(Dno) AS (SELECT DISTINCT Dno FROM s_mag)

(S4): s_mag(Ename, Dno, Sal) AS (SELECT Ename, Dno, Sal FROM emp WHERE Job = 'Sr Programmer')

Один из возможных планов выполнения S состоит в том, чтобы выбрать служащих, являющихся старшими программистами (s_mag), определить, в каких отделах имеется хотя бы один из таких служащих (mag), вычислить среднюю зарплату только для этих отделов (mag_avgsal) и затем выбрать всех старших программистов (s_mag), которые получают зарплату выше средней зарплаты своего отдела. Порядок доступа может быть другим, как если бы запрос был декоррелированным, и операции являются ориентированными на множества.Более того, не затрагиваются нерелевантные данные, поскольку средняя зарплата вычисляется только для отделов, содержащих старших программистов. Однако эта магика становится возможной за счет вычисления дополнительных таблиц s_mag и mag.

Магический запрос S напоминает приведенный в разд. 2.1 пример с полусоединением. Информация об уместных связываниях (отделы, включающие старших программистов) передается «сторонним образом» от emp к mag_avgsal.




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



Книжный магазин