【发布时间】:2013-01-07 05:08:01
【问题描述】:
我有一个包含 3000K 行的表“MSATTRIBUTE”。我使用以下查询来检索数据,该查询具有不同的执行计划,具有相同的数据库数据但在不同的环境中。在一个环境中,它显示为全表扫描,因此查询非常慢,但在另一个环境中,它都使用索引扫描,这非常好,每个人都知道为什么它在一个环境中进行全表扫描,因为我为他们建立了索引,我该怎么做让我们成为索引扫描,就像我在 env 1 中测试的那样。我如何改进这个查询?
【问题讨论】:
-
不是
3000K == 3M吗? ;) -
最近是否添加了索引(我不清楚),如果是,您从那时起是否收集了统计数据?您可以查看
all_tables和all_indexes的last_analyzed列;对于新索引,后者可能为空。如果是这种情况,优化器可能不会考虑使用索引。 -
索引是否存在于所有环境中?您是否在每个环境中使用相同的软件版本?你的环境是什么?
-
索引是建表的时候建的,所以最近没有加。数据是一样的,我使用 imp/exp 从一个数据库(env)导入并导出到另一个 env,唯一的区别是一个 env 是使用全表扫描的 oracle 11g R1,另一个使用索引扫描的 db 是 11g R2,但我认为这个小的版本差异不会影响执行计划。
-
@Kur.C 另一方面,R1 和 R2 之间可能存在代码差异,这完全解释了执行计划的差异。
标签: database performance oracle oracle11g query-optimization