2013-08-21 60 views
-1

我是一名SQL人員,但我在ORACLE領域擔任過一段時間。 w /擴大界限沒有錯......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使用該索引。它似乎並不想默認。

+7

該視圖的定義是什麼?該視圖是否在阻止索引被使用?什麼是查詢計劃?優化器的基數估計是否準確?或者在一個或多個對象上是否丟失/不正確的統計信息? –

+3

檢查執行計劃,你就會知道 –

回答

2

要回答你的問題:您可以強制Oracle的SQL優化器使用某一指數:

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

這裏這的thingie /*+ INDEX (table indexname)*/稱爲optimizer-hint。大多數情況下,使用它不是很明智。