gpt4 book ai didi

Oracle 函数的优化器

转载 作者:行者123 更新时间:2023-12-03 15:40:49 25 4
gpt4 key购买 nike

我有一个查询,如:

SELECT id, value
FROM very_large_table -- over 5 million records
WHERE foo(value) > 5 AND boo(value) IS NOT NULL

假设 fooboo是函数,这也会在没有索引的超大表上进行大量选择(因此执行成本很高)。

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

有没有关于这个主题的包/文章,因为,如果我做得对 - oracle 不会做这种优化

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

最佳答案

Oracle 可以做这种优化,但需要用勺子喂
它被称为 Oracle Extensible Optimizerassociate statistics

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

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

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

如果您无法控制查询(例如使用某些 BI 工具),则高级内容将适用。另一个原因是,如果您有一群编码人员,那么开发这种理解就太过分了,并且让一两个“数据库人员”管理这方面的事情会更容易。

关于Oracle 函数的优化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6320201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com