SQL復(fù)合索引使用和注意事項(xiàng)
1、定義:
單一索引:
單一索引是指索引列為一列的情況,即新建索引的語(yǔ)句只實(shí)施在一列上;
復(fù)合索引:
復(fù)合索引也叫組合索引袱耽;
用戶可以在多個(gè)列上建立索引,這種索引叫做復(fù)合索引(組合索引)漠秋。
復(fù)合索引在數(shù)據(jù)庫(kù)操作期間所需的開(kāi)銷更小,可以代替多個(gè)單一索引;
同時(shí)有兩個(gè)概念叫做窄索引和寬索引,窄索引是指索引列為1-2列的索引,寬索引也就是索引列超過(guò)2列的索引;
設(shè)計(jì)索引的一個(gè)重要原則就是能用窄索引不用寬索引,因?yàn)檎饕冉M合索引更有效;
2瘦真、使用:
創(chuàng)建復(fù)合索引 :
CREATE INDEX columnId ON table1(col1,col2,col3) ;
查詢語(yǔ)句:
select * from table1 where col1= A and col2= B and col3 = C
這時(shí)候查詢優(yōu)化器,不在掃描表了,而是直接的從索引中拿數(shù)據(jù),因?yàn)樗饕杏羞@些數(shù)據(jù),這叫覆蓋式查詢,這樣的查詢速度非城﹂荩快;
3眠寿、注意事項(xiàng):
1、對(duì)于復(fù)合索引,在查詢使用時(shí),最好將條件順序按找索引的順序,這樣效率最高;
select * from table1 where col1=A AND col2=B AND col3=D
如果使用
where col2=B AND col1=A
或者
where col2=B
將不會(huì)使用索引山憨。
2查乒、何時(shí)是用復(fù)合索引 根據(jù)where條件建索引是極其重要的一個(gè)原則; 注意不要過(guò)多用索引,否則對(duì)表更新的效率有很大的影響,因?yàn)樵诓僮鞅淼臅r(shí)候要化大量時(shí)間花在創(chuàng)建索引中
3、復(fù)合索引會(huì)替代單一索引么 如果索引滿足窄索引的情況下可以建立復(fù)合索引,這樣可以節(jié)約空間和時(shí)間
4郁竟、備注:
對(duì)一張表來(lái)說(shuō),如果有一個(gè)復(fù)合索引 on (col1,col2),就沒(méi)有必要同時(shí)建立一個(gè)單索引 on col1玛迄;
如果查詢條件需要,可以在已有單索引 on col1的情況下,添加復(fù)合索引on (col1,col2),對(duì)于效率有一定的提高;
同時(shí)建立多字段(包含5棚亩、6個(gè)字段)的復(fù)合索引沒(méi)有特別多的好處,相對(duì)而言,建立多個(gè)窄字段(僅包含一個(gè),或頂多2個(gè)字段)的索引可以達(dá)到更好的效率和靈活性蓖议。
5虏杰、例子: