【发布时间】:2012-02-04 09:13:54
【问题描述】:
我为一个表创建了一个索引,一个简单的索引就像这样:
CREATE INDEX IDX_TRANSACAO_NOVA_STATUS ON TRANSACAO_NOVA(STATUS) TABLESPACE COMVENIF;
这个表有 1000K 寄存器 insinde 和状态表只有 5 或 6 个可能的值。创建索引后,我希望下面的查询会有更好的性能:
select * from transacao_nova tn where tn.status = 'XXX'
但是,解释计划仍然向我展示了一个完整的扫描,成本为 16.000。
有什么帮助吗?我不是 dba,但我需要提高这种性能。
提前致谢。
【问题讨论】:
-
在某些情况下,优化引擎会决定只进行全表扫描而不是尝试使用索引更便宜。并不是说这里发生了这种情况,但这是发生这种情况的原因之一。
-
您只需要第一行,还是需要所有行?你建立了统计数据吗?为什么不接受问题的答案?
-
数据的分布是什么 - 您的行中有多少百分比具有感兴趣的单数状态代码? Oracle 认为数据的分布是什么?
-
如果您选择 1/6 的表格更改,就像 @MarcB 所说的那样,您所做的就是放慢速度。特别是因为您选择的是
*而不仅仅是索引列。将提示/* full(tn) */添加到您的选择中,看看需要多长时间。 -
NULL 是可能的值之一吗?
标签: performance oracle indexing