Базы данных Oracle - статьи




Упрощение группировки


Упрощение группировки (Group Pruning) — еще одно императивное преобразование, которое удаляет из представлений группы, не требующиеся во внешних блоках запроса. Например, рассмотрим запрос Q9:

Q9

SELECT sum_sal, country_id, state_id, city_id FROM (SELECT SUM (e.salary) sum_sal, l.country_id, l_state_id, l.city_id FROM employees e, departaments d locations l WHERE e.dept_id = d.dept_id and d.location_id = l.location_id GROUP BY ROLLUP (counrty_id, state_id, city_id)) WHERE city_id = 'San Francisco';

В приведенном выше запросе внешний предикат на city_id фильтрует группы (country_id) и (country_id, state_id). Преобразование может быть выполнено на основе как предикатов на столбцах раздела GROUP BY, так и функций группировки. Это преобразование выполняется после перемещения упрощающих предикатов фильтрации в непосредственную близость к запросу с GROUP BY.

Заметим, что здесь мы используем нестандартную нотацию полусоединения (semijoin) T1.C S= T2.C, где T1 и T2 — левая и правая таблица полусоединения соответственно.




Содержание  Назад  Вперед