2011-11-08 2 views
4

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) 

トレードオフは、分析関数を使用して、私はすぐにビュー内のすべてのレコードを取得することができるということですが、それは遅いですがインデックス付き列でフィルタリングされたレコードのサブセットのみを取得している場合このように使用すると、分析関数が述語プッシュを使用して素早くなるようにしたいと思います。

分析関数を使用するビューを作成することは可能ですか?可能な場合は述語をプッシュしますか?

答えて

関連する問題