Вот пример представления с именем 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)
Компромисс состоит в том, что с помощью аналитических функций я могу быстро получить все записи в представлении, но это медленно, если я получаю только подмножество записей, отфильтрованных по индексируемому столбцу.Мне бы хотелось, чтобы аналитическая функция использовала предикатное проталкивание, чтобы оно было быстрым при использовании таким способом.
Возможно ли иметь представление, которое использует аналитические функции и будет выдвигать предикаты, где это возможно?