我有一个查询:
SELECT id, value
FROM very_large_table -- over 5 million records
WHERE foo(value) > 5 AND boo(value) IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
假设foo并且boo是函数,这也使得在没有索引的超大型表上进行大量选择(因此它的执行成本很高).
我(作为程序员)知道,foo在99%的时间内返回超过5,但boo回报率为99.9%NULL.
很明显,首先boo应该计算出来.如果是NULL,我们不希望结果集中有这一行.所以我们不需要计算foo,因为boo已经NULL.
是否有关于这个主题的任何包/文章,因为,如果我做得对 - oracle不做这种优化
以上只是一个例子.在我的情况下,有很多功能(~50),我在各种组合的各种选择中使用它们.所以重写函数并不是真正的选择,因为在实际情况中有很多它们:我只是想表明这些请求真的很慢.我只想到某种优化器(除了oracle之外)