はMANVW
という名前の一例図である。ここではPARTITION BY分析関数を使用して、問合せに述語プッシュを使用できますか?ここ
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を使用した場合、それはインデックスを使用します:
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)
トレードオフは、分析関数を使用して、私はすぐにビュー内のすべてのレコードを取得することができるということですが、それは遅いですがインデックス付き列でフィルタリングされたレコードのサブセットのみを取得している場合このように使用すると、分析関数が述語プッシュを使用して素早くなるようにしたいと思います。
分析関数を使用するビューを作成することは可能ですか?可能な場合は述語をプッシュしますか?