【发布时间】:2014-01-15 11:04:16
【问题描述】:
我在 Oracle 11g R2 中遇到了这个问题。包含使用非唯一索引索引的非空列的表。该索引不包含其他列。
然后我假设如果我从表中查询列的不同值,它将使用索引来获取列的不同值(听起来合乎逻辑)。但是至少解释计划告诉我它正在进行全表扫描。也花了一些时间,所以计划在运行时可能没有改变。优化器索引提示没有帮助。
我试图为此寻找答案,但没有运气。有没有办法获取存储在索引中的值或以某种方式查询表而不“接触”表(就像多列索引连接一样)?
谢谢!
编辑:这是关于 Oracle EBS gl_balances 表和 gl_balances_n2 索引的。我得到了答案,这改变了解释计划:
select /*+ index_ffs(gl gl_balances_n2) */
distinct gl.period_name
from gl_balances gl;
【问题讨论】:
-
一般来说你的假设是正确的。你能发布你的选择声明吗?桌子有多大?
-
尝试将
your_column IS NOT NULL条件添加到您的查询中,这通常可以解决问题。 -
@YaroslavShabalin 如果列被限制为 NOT NULL,则不应该是必需的,如问题中所述。
-
@DavidAldridge 是的,但在某些情况下它会愚弄 CBO。
-
@YaroslavShabalin 从未见过这种情况。不过,希望看到它的文档示例。
标签: sql database oracle indexing