Может ли Oracle использовать отправку предикатов для запроса с использованием аналитических функций PARTITION BY? - PullRequest
4 голосов
/ 08 ноября 2011

Вот пример представления с именем MANVW:

SELECT manager_id, manager_sign
FROM (
  SELECT manager_id, manager_sign, effdt
  MAX(effdt) OVER (PARTITION BY manager_id) AS max_dt
  FROM managers)
WHERE effdt = max_dt;

Вот мой запрос:

SELECT * from MANVW where manager_sign = 'ABC';

К сожалению, когда я запрашиваю этот вид, он строит весь встроенный вид (где аналитическая функция) и не использует индекс для manager_sign.

Если я использовал вложенный выбор для MANVW, он использует индекс:

SELECT m.manager_id, m.manager_sign
FROM managers m
where m.effdt = (select max(mi.effdt) from managers mi where mi.manager_id = m.manger_id)

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

Возможно ли иметь представление, которое использует аналитические функции и будет выдвигать предикаты, где это возможно?

1 Ответ

2 голосов
/ 08 ноября 2011

Полагаю, я не достаточно долго искал, прежде чем задать свой вопрос, потому что кто-то уже задавал Тому точно такой же вопрос: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:3469884600671

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...