强制oracle使用索引

时间:2009-11-29 16:20:53

标签: oracle

有没有办法强制oracle使用索引除了Hints?

5 个答案:

答案 0 :(得分:7)

没有。如果优化器不使用索引,它通常有充分的理由。索引使用情况,如果索引较差,实际上可能会降低查询速度。

答案 1 :(得分:7)

Oracle在认为索引为

时不使用索引
  • 禁用
  • 无效(例如,在大量数据加载和有关索引的统计信息尚未更新之后)
  • 无效(例如,当500万行中只有两个不同的值时)

首先要检查的是索引是否已启用,然后在索引/表/架构上运行correct GATHER command。如果这没有帮助,Oracle认为加载索引实际上比加载实际行值花费更多时间。在这种情况下,请在索引中添加更多列,使其看起来更“多样化”。

答案 2 :(得分:1)

您可以查看oracle存储的大纲。您可以采用现有查询并创建存储的大纲,并像提示一样调整查询。这很难使用。在决定实施存储的轮廓之前做一些研究。

您可以在查询中添加提示,使其在一个索引上看起来比另一个索引更有利。

通常,如果您已经收集了所有表和索引的良好统计信息,Oracle通常会实现非常好的执行计划。

答案 3 :(得分:0)

如果您的查询在其条件中不包含索引字段,则使用索引的DB将是愚蠢的。因此,我再次回答唐尼的回答。

答案 4 :(得分:0)

是的,从技术上讲,你可以强制Oracle在一个场景中使用索引(没有提示):如果表是一个索引组织的表,那么逻辑上查询表的唯一方法是通过索引,因为有没有要查询的表。