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

         

Перемещение предикатов фильтрации


При перемещении предикатов фильтрации (Filter Predicate Move Around) дешевые предикаты сдвигаются в блоки запросов представления для выполнения более ранней фильтрации. Преобразование перемещения предикатов фильтрации выполняется на основе императивных эвристик, поскольку оно может сделать доступными новые пути доступа и уменьшить размер данных, обрабатываемых позднее более дорогостоящими операциями, такими как соединения и группировки.

Предикаты фильтрации могут вытягиваться наверх (pull up), перемещаться в сторону (move across) и проталкиваться вниз (push down) на любой уровень. Интересным расширением [9] является наша возможность проталкивания предикатов фильтрации сквозь раздел PARTITION BY оконных функций стандарта ANSI и разделенное внешнее соединение ANSI, а также сквозь подраздел DIMENSION BY раздела SQL MODEL [25], [26]. Еще одной техникой, уникальной для нашей системы, является проталкивание предикатов сквозь агрегат оконной функции перед вычислением агрегатов [26]. Сейчас она применяется только внутри раздела SQL MODEL, но в следующей версии будет обобщена на оконнные функции, присутствующие в списке SELECT блока запроса. Пусть, например, имеется таблица accounts (act-id, time, balance), в которой в динамике по времени регистрируются текущие остатки на счетах. Рассмотрим встраиваемое представление, рассчитывающее скользящий средний остаток, и внешний запрос, выбирающий его за 12 месяцев для счета'ORCL':

Q7

SELECT acct-id, time, ravg FROM (SELECT acct-id, time, AVG(balance) over (PBY acct-id OBY time RANGE BEETWEN UNBOUNDED PROCEEDING AND CURRENT ROW) ravg FROM accounts) WHERE acct-id='ORCL' AND time <= 12;

В этом запросе предикаты над acct-id и time можно протолкнуть внутрь представления.

Q8

SELECT acct-id, time, ravg FROM (SELECT acct-id, time, AVG(balance) over (PBY acct-id OBY time RANGE BEETWEN UNBOUNDED PROCEEDING AND CURRENT ROW) ravg FROM accounts WHERE acct-id='ORCL' AND time <= 12);

Проталкивание предикатов сквозь PARTITION BY (PBY) можно выполнять всегда. Для проталкивания сквозь ORDER BY (OPBY) требуется анализ [26] затрагиваемого диапазона оконной функции.



Содержание раздела