Oracle函数的优化器

我有一个查询
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 Optimizerassociate statistics

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

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

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

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

相关文章

数据库版本:11.2.0.4 RAC(1)问题现象从EM里面可以看到,在23号早上8:45~8:55时,数据库等待会话暴增...
(一)问题背景最近在对一个大约200万行数据的表查看执行计划时,发现存在异常,理论上应该返回100多万...
(一)删除备份--DELETE命令用于删除RMAN备份记录及相应的物理文件。当使用RMAN执行备份操作时,会在RM...
(1)DRA介绍 数据恢复顾问(Data Recovery Advise)是一个诊断和修复数据库的工具,DRA能够修复数据文...
RMAN(Recovery Manager)是Oracle恢复管理器的简称,是集数据库备份(backup)、修复(restore)和恢复...
(1)备份对象 可以使用RMAN进行的备份对象如下: --整个数据库:备份所有的数据文件和控制文件; --数...