2012-11-28 50 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

感谢它工作正常..我已经在答案中添加新的解释计划..谢谢 –