【发布时间】:2020-07-01 18:05:51
【问题描述】:
我的查询如下所示
select nvl(a.value1,nvl(b.value1,nvl(c.value1,''))
from table1 a, table2 b table3 c
where a.value2=b.value2 and b.value3=c.value3
由于此查询包含一个 nvl 函数,它从我的三个表中列出 value1,它正在进行全表扫描,我知道我是否可以创建基于函数的索引 oracle 应该考虑该索引,但我担心的是 nvl函数在三个不同表的列上我无法创建基于函数的索引,任何其他方式来重写查询或任何其他方式我可以在这里使用索引,请帮助
【问题讨论】:
-
您确定是 nvl 导致了您的问题 - 您没有在连接条件下使用它,因此 index/FTS 受到影响似乎很奇怪?顺便说一句,
nvl(c.value1,'')毫无意义,因为''与 Oracle 中的 null 相同;你应该考虑使用现代连接语法。
标签: oracle oracle12c sql-tuning database-tuning query-tuning