Oracle - 视图是否使用表索引(如果存在)

时间:2013-08-21 19:52:45

标签: performance oracle query-optimization

我是一个SQL人,但我正在ORACLE土地上做一段时间。没有什么错误可以扩大一个人的界限....

我已经看到了一张桌子。我有权从该视图中删除。

Delete from vwGregsViewOnTable where SEQ = 12345 

这需要12分钟。表中有大约20M行,但是12分钟? 我找到了一名DBA,他们确认我正在进行表扫描。

我们编写了表格,并在此部分编写了......

CREATE TABLE SYT_SYALERTQUEUE
(
  IDRECMAIN          VARCHAR2(32 BYTE),
  IDRECPARENT        VARCHAR2(32 BYTE),
  IDREC              VARCHAR2(32 BYTE),
  SEQ                NUMBER(10),
.
.
.


CREATE INDEX SYNDX00000000000000000002277 ON SYT_SYALERTQUEUE
(SEQ)
LOGGING
TABLESPACE WV90NDX

看来我告诉我应该使用的列上有一个索引。

在这种情况下,vwGregsViewOnTable是SYT_SYALERTQUEUE上的视图

我的问题是 - 如何让ORACLE使用索引。它似乎默认不想。

1 个答案:

答案 0 :(得分:2)

回答你的问题:你可以强制Oracle的SQL优化器使用某个索引:

SELECT /*+ INDEX (table indexname)*/ col1, col2
  FROM table
  WHERE blabla ;

此处/*+ INDEX (table indexname)*/的内容称为optimizer-hint。大多数时候使用它并不是明智之举。