加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle函数的优化器

发布时间:2020-12-12 13:09:36 所属栏目:百科 来源:网络整理
导读:我有一个查询: SELECT id,valueFROM very_large_table -- over 5 million records WHERE foo(value) 5 AND boo(value) IS NOT NULL 假设foo和boo是函数,这也使得在没有索引的超大型表上进行大量选择(因此它的执行成本很高). 我(作为程序员)知道,foo在99%的
我有一个查询:
SELECT id,value
FROM very_large_table -- over 5 million records 
WHERE foo(value) > 5 AND boo(value) IS NOT NULL

假设foo和boo是函数,这也使得在没有索引的超大型表上进行大量选择(因此它的执行成本很高).

我(作为程序员)知道,foo在99%的时间内返回超过5,但是boo是99,9%返回NULL.
很明显,首先应该计算boo.如果它是NULL,我们不希望结果集中有这一行.所以我们不需要计算foo,因为boo已经是NULL.

是否有关于这个主题的任何包/文章,因为,如果我做得对 – oracle不做这种优化

以上只是一个例子.在我的情况下,有很多功能(~50),我在各种组合的各种选择中使用它们.所以重写函数并不是真正的选择,因为在实际情况中有很多它们:我只是想表明这些请求真的很慢.我只想到某种优化器(除了oracle之外)

Oracle CAN可以进行这种优化,但需要进行勺子馈送
它被称为 Oracle Extensible Optimizer和 associate statistics

但在这种情况下,这样做的简单方法就是这样

where case when boo(value) is null then 0 else foo(value) end > 5

这会强制在foo之前评估boo函数.

如果您无法控制查询(例如,使用某些BI工具),则可以使用高级内容.另一个原因是,如果你有一堆编码器,那么开发那种理解会过度,并且让一两个’数据库人’管理这方面的事情会更容易.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读