【问题标题】:Forcing an index in oracle在 oracle 中强制索引
【发布时间】:2011-09-14 15:22:32
【问题描述】:

我有一个查询连接了很多字段。由于某种奇怪的原因,一个表的索引根本没有被使用(我清楚地使用了索引键),而是在进行全表扫描。我想强制索引。我们曾经在 sybase 中做优化器提示。 oracle中是否有类似的提示? 例如,在 sybase 中连接表 a、b、c 并在表 a 中使用 myindex,我会这样做:

SELECT a.*
FROM     a(INDEX myindex),
         b,
         c
WHERE    a.field1 = b.field1
AND      b.field1 = c.field1

问题是我如何在 oracle 中执行此操作。 谢谢 萨罗

【问题讨论】:

标签: oracle optimization indexing


【解决方案1】:

是的,Oracle 中有类似的提示。它看起来像这样:

select /*+ index(a my_index) */ from a

【讨论】:

  • 您需要表格规范(参见docs);如果您想建议 Oracle 使用索引但不想指定哪个索引,则索引名称是可选的。所以应该是INDEX(a my_index)。并且如果表在查询中有别名,则必须使用别名作为 tablespec。
  • 谢谢。所以你是说我应该这样做: SELECT /*+ index(a my_index) / , a. FROM a(INDEX myindex), b, c WHERE a.field1 = b.field1 AND b.field1 = c.field1
  • @Saro - 否:SELECT /*+ index(a my_index) */ a.* FROM a, b, c WHERE a.field1 = b.field1 AND b.field1 = c.field1。 (最好使用 ANSI 连接,但这是另一个主题......)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-02
  • 2013-06-13
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多