sql - Oracle 可以使用 PARTITION BY 分析函数对查询使用谓词推送吗?

标签 sql oracle view

这是一个名为 MANVW 的示例 View :

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';

不幸的是,当我查询此 View 时,它构建了整个内联 View (分析函数所在的位置)并且不使用 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)

权衡是使用分析函数我可以快速检索 View 中的所有记录,但如果我只检索由索引列过滤的记录的子集,它会很慢。我希望解析函数使用谓词推送,以便在使用这种方式时会很快。

是否有可能有一个使用分析函数的 View ,并在可能的情况下推送谓词?

最佳答案

我想我在问我的问题之前没有搜索足够长的时间,因为有人已经问过汤姆完全相同的问题:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:3469884600671

关于sql - Oracle 可以使用 PARTITION BY 分析函数对查询使用谓词推送吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8044633/

相关文章:

c# - ORA-01000 : maximum open cursors exceeded using oracle instant client and C#

c# - Oracle 和 C# - UDT 数组作为返回值

django - 如何从模型返回错误信息?

android - 设置内容 View

sql - Oracle如何将UTC时间转换为本地时间(缺少偏移量信息)

Android自定义View(TextView+Button+一些自定义行为)?

php - 使用递归函数在列表中将 SQL 帖子相互分组

c# - 使用 mysqlexception 捕获特定键

sql - MySQL中涉及复合外键的多表join怎么办?

sql - 我可以在 Oracle 中传递 varchar2 的数字吗?