【发布时间】:2012-11-28 06:01:39
【问题描述】:
我正在尝试了解索引提示,但即使在查询中提供提示后,它也没有被使用。这是我遵循的步骤,我错过了什么吗?
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
【问题讨论】:
-
@Rene - 我在 emp_1 表中添加了大约 100000 条记录,无论如何这都无关紧要,因为我在这里给出了明确的提示。@Mat 我只是想了解索引,所以它是一种自我学习此时..我已经从sql提示符复制了所有命令。