天天看點

oracle 複合索引 英文,oracle目錄(4)——複合索引

4.複合索引

在大多數情況下,複合索引比單字段索引号,因為可以過濾出更多資料,精确定位。但是要考慮實際情況,不能濫用,不能亂用。

複合索引設計原則:

1、字首性

也就是說到底把那個字段放在第一個未知呢,這個至關重要

例如:(col1,col2,col3)這個索引包含三個字段

SELECT * FROM tab1 WHERE col1='XX'

SELECT * FROM tab1 WHERE col2='XX'

SELECT * FROM tab1 WHERE col3='XX'

SELECT * FROM tab1 WHERE col1='XX' AND NAME='CCC'

SELECT * FROM tab1 WHERE col2='XX' AND NAME='CCC'

針對上面的幾個SQL語句,到底誰會走索引,誰不走索引你。

其實隻要含有col1='SSSS'條件的語句都會走索引

這就是為什麼第一個字段為什麼這麼重要的原因了

2、可選性

就是用于索引的字段的非重複資料必須多,像用性别來做索引字段就行不通。

将字段可選性越多的字段放到前面

複合索引使用建議:

1、分析SQL語句中限制條件字段

2、限制條件比較固定的,優先采用B*樹複合索引

3、單個字段是主鍵、唯一鍵或則其他可選性很高的字段可以建立單字段索引,節省索引開銷

4、在建立複合索引的時候,優先考慮其字首性,其次是可選性

5、如果涉及到幾個條件使用頻繁,但是查詢組合不固定,可以分别建立單字段索引

6、如果是多表連接配接,可以考慮在被驅動表的連接配接字段與該表的其他字段建立複合索引

7、通過檢視SQL語句執行計劃進行分析

複合索引的優點:

改善選擇性:複合索引比單個字段的索引更具選擇性

減少I/O:如果要查詢的字段剛好全部包含在複合索引的字段裡,則ORACLE隻須通路索引,無須通路表

什麼情況下優化器會用到複合索引呢?

(a) 當SQL語句的WHERE子句中有用到複合索引的上司字段時,ORACLE優化器會考慮用到複合索引來通路.

(b) 當某幾個字段在SQL語句的WHERE子句中經常通過AND操作符聯合在一起使用作為過濾謂詞,并且這幾個字段合在一起時選擇性比各自單個字段的選擇性要更好時,可能考慮用這幾個字段來建立複合索引.

(c) 當有幾個查詢語句都是查詢同樣的幾個字段值時,則可以考慮在這幾個字段上建立複合索引.

複合索引字段排序的原則:

確定在WHERE子句中使用到的字段是複合索引的上司字段

如果某個字段在WHERE子句中最頻繁使用,則在建立複合索引時,考慮把這個字段排在第一位(在CREATE INDEX語句中)

如果所有的字段在WHERE子句中使用頻率相同,則将最具選擇性的字段排在最前面,将最不具選擇性的字段排在最後面

如果所有的字段在WHERE子句中使用頻率相同,如果資料在實體上是按某一個字段排序的,則考慮将這個字段放在複合索引的第一位