0
如果我有一個Oracle查詢象下面這樣:有關Oracle索引簡單的問題
SELECT * FROM table_a where A = "1", B = "2", C = "3"
此查詢皮卡表-A的指標之一...沒有索引必須對這些列的所有3 ?
我所問的是:
如果指數是在A,B,C,d?
如果指數在B,C上怎麼辦?
只有當 在A,B,C上時纔會選取索引嗎?
如果我有一個Oracle查詢象下面這樣:有關Oracle索引簡單的問題
SELECT * FROM table_a where A = "1", B = "2", C = "3"
此查詢皮卡表-A的指標之一...沒有索引必須對這些列的所有3 ?
我所問的是:
如果指數是在A,B,C,d?
如果指數在B,C上怎麼辦?
只有當 在A,B,C上時纔會選取索引嗎?
Oracle基於成本的優化器(CBO)嘗試選擇表中最便宜的訪問路徑。訪問單個表的路徑包括索引範圍掃描,索引完整掃描和表完整掃描; CBO將估算每個計劃的成本,並選擇成本最低的計劃。
1.如果指數是在A,B,C,D上怎麼辦?
是的,Oracle可能會使用這個索引 - 並且成本可能很低,因爲索引的前導列(其中3個)在您的查詢中受到限制。
2.如果指數在B,C上怎麼辦?
是的,Oracle可能會使用這個索引 - 並且由於索引的所有列都在您的查詢中受到限制,因此成本可能會相當低。
3.索引只能在A,B,C上選取嗎?
不,它不是排他性的。是的,Oracle可能會使用這個索引 - 並且成本可能很低,因爲索引的所有列都被限制在您的查詢中。
其他因素需要考慮:
*
(所有列)。如果表只有四列(A,B,C,D),那麼CBO可能會更喜歡一個完全根據(A,B,C,D)上的索引滿足查詢的計劃,根本不訪問表。
取決於列的選擇性.... – 2010-06-03 05:29:45
文字值由單引號',而不是雙引號「 – 2010-06-03 06:21:55