SQL> desc emp_1;
Name Type Nullable Default Comments
-------- ------------ -------- ------- --------
EMP_ID NUMBER
EMP_NAME VARCHAR2(20) Y
DEPTNO NUMBER(10) Y
SQL> 描述部门
Name Type Nullable Default Comments
--------- ------------ -------- ------- --------
DEPT_ID NUMBER Y
DEPT_NAME VARCHAR2(20) Y
SQL> 创建索引 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
Explain Plan :-
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
select /*+ index(emp_1 abc_idex) */ emp_name from emp_1 INNER JOIN dept ON emp_1.deptno = dept.dept_id 和 emp_1.emp_name=dept.dept_name
Explain Plan:-
SELECT STATEMENT, GOAL = ALL_ROWS 272 1 11
HASH JOIN 272 1 11
TABLE ACCESS FULL EXAMINBI DEPT 3 4 24
TABLE ACCESS BY INDEX ROWID EXAMINBI EMP_1 267 100000 500000
INDEX FULL SCAN EXAMINBI ABC_IDEX 131 100000
在您的帮助下,我正在清除我的索引概念。我的理解是,oracle 将跳过我的索引提示,因为它需要其他未索引的列(emp_name),但在第二种情况下,emp_1 表仍被索引扫描。我的问题在这种情况下是否会有所帮助,我使用另一列进行不使用索引的连接(在我们的示例 emp_name 中)?在这种情况下我们应该使用索引提示吗?*注意:- 我知道这是 emp_name 和 dept_name 不是逻辑连接,但只是为了测试目的,我创建了相同的。*