我的問題與this one類似,但有一點點不同。我有一個查詢在多個WHERE
條件下的單個表上運行。查詢可以使用同一個表中的多個索引嗎?
假設我的表中有多個列(COL1 - col9),我有這樣一個查詢:
SELECT
col1
, col5
FROM table1
WHERE col1 = 'a'
AND col2 = 'b'
AND col3 = 100
AND col4 = '10a'
AND col5 = 1
我的指標是:
- COL1 - 獨特/非分區
- col2,col3 - 非唯一/分區
- col4,col5 - 非唯一/分區
我的問題是,如果我使用涵蓋多個索引的WHERE
子句中的列,(應該?)查詢首先選擇唯一索引以生成結果集,然後在該結果集上使用另外兩個索引進行進一步過濾,從而依次減少結果集?
或者每個索引都會遍歷表中的所有數據,每個條件將使用索引,然後合併所有結果集?
(我沒有訪問表/數據,這比實際的更理論)。
預先感謝您的任何幫助
不確定爲什麼它與上一個問題不同,因爲它也適用於一個表。 Oracle使用哪種指數取決於每種選擇性 - 或基於統計數據的CBO認爲選擇性是什麼 - 等等。閱讀關於查詢優化器以及它如何做出決定; [索引加入](http://docs.oracle.com/cd/E29597_01/server.1111/e16638/optimops.htm#i56068)可能是你感興趣的東西。(和[索引提示說明](http ://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements006.htm#BABEFDFC)可能會解釋發生了什麼。) –
@AlexPoole感謝您的意見! –
由於'col1'上的索引是一個唯一索引,並且您在'col1 ='a''上過濾,所以Oracle很明顯只會使用這個索引。其他任何事情都會浪費資源。 –