2012-11-28 64 views
0

我試圖瞭解索引提示,但即使在查詢中提供提示後,它仍未被使用。這是我遵循的步驟,我錯過了什麼?索引提示不起作用

SQL> desc emp_1; 
Name  Type   Nullable Default Comments 
-------- ------------ -------- ------- -------- 
EMP_ID NUMBER         
EMP_NAME VARCHAR2(20) Y       
DEPTNO NUMBER(10) Y    


SQL> desc dept 
Name  Type   Nullable Default Comments 
--------- ------------ -------- ------- -------- 
DEPT_ID NUMBER  Y       
DEPT_NAME VARCHAR2(20) Y       


SQL> CREATE INDEX abc_idex ON emp_1 (deptno); 

Index created 

select /*+ index(emp_1.abc_idex) */ emp_name from emp_1 
INNER JOIN dept ON emp_1.deptno = dept.dept_id 

解釋計劃: -

SELECT STATEMENT, GOAL = ALL_ROWS   6 1 28 
HASH JOIN   6 1 28 
    TABLE ACCESS FULL EXAMINBI EMP_1 2 1 25 
    TABLE ACCESS FULL EXAMINBI DEPT 3 4 12 

按劉若英的回答

select /*+ index(emp_1 abc_idex) */ emp_name from emp_1 
INNER JOIN dept ON emp_1.deptno = dept.dept_id 

解釋計劃

SELECT STATEMENT, GOAL = ALL_ROWS   271 100000 800000 
MERGE JOIN   271 100000 800000 
    TABLE ACCESS BY INDEX ROWID EXAMINBI EMP_1 267 100000 500000 
    INDEX FULL SCAN EXAMINBI ABC_IDEX 131 100000 
    SORT JOIN   4 4 12 
    TABLE ACCESS FULL EXAMINBI DEPT 3 4 12 
+0

@ Rene - 我在emp_1表中添加了大約100000條記錄,反正它應該不重要,因爲我在這裏給出明確的提示.. @Mat我只是試圖瞭解索引,所以它在這一點上的自我學習..我已經從sql提示符複製了所有命令。 –

回答

3

Tahitis documentation,你不能把之間的.表規格索引規格

+0

感謝它工作正常..我已經在答案中添加新的解釋計劃..謝謝 –