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> CREATE INDEX abc_idex ON emp_1(DEPTNO);
Index created
選擇/ * +指數(emp_1 abc_idex)* /從emp_1 EMP_NAME INNER JOIN部門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
選擇/ * +指數(emp_1 abc_idex)*/EMP_NAME從emp_1 INNER JOIN部門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
我米清除我的索引CON除了你的幫助。我的理解是甲骨文會跳過我的索引提示,因爲它需要其他列也沒有索引(emp_name)但仍emp_1表索引在第二種情況下掃描。我的問題會幫助在這種情況下,我在哪裏使用另一列連接索引不使用(在我們的例子emp_name)?我們應該在這種情況下使用索引提示嗎? *注意: - 我知道這是emp_name和dept_name不是邏輯連接,但僅用於測試目的,我創建了相同的。*
我只是瞭解索引而不是項目或任何東西,只是爲了我的理解目的。我想知道它是否建議在聯接時使用索引提示,您使用的是同一個表中的非索引列。它會有幫助嗎?此外,我的理解是在我的第二個查詢中,它將是全表掃描,並會跳過我的提示。但是,如果您注意到解釋計劃,emp_1表只能通過索引訪問,而cants可以查看有關全表掃描的任何內容。我在解釋計劃中錯過了些什麼? –
在第二個查詢中,通過完整掃描的提示掃描您的索引。這意味着Oracle從索引中選擇所有記錄。索引是存儲rowid的二叉樹結構。對於每個查詢的rowid,都從表EMP_1中選擇單個行。全索引掃描意味着查詢所有記錄,這意味着所有的錶行也被查詢。 –