以下是名为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)
权衡是使用分析函数我可以快速检索视图中的所有记录,但如果我只检索由索引列过滤的记录的子集,则速度很慢。我希望分析函数能够使用谓词推送,这样在使用这种方式时会很快。
是否可以拥有一个使用分析函数的视图,并尽可能推送谓词?
答案 0 :(得分:2)
我想我在问我的问题之前没有搜索足够长的时间,因为有人已经问过Tom完全相同的问题:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:3469884600671