mysql復合索引
問題:MYSQL INNodb建立復合索引 a,b,c;那麽 查詢條件 where a =xxx and c= xxx 能用到索引嘛?
回答:可以。
----------------------------------------------
原因:http://www.cnblogs.com/summer0space/p/7247778.html
http://blog.codinglabs.org/articles/theory-of-mysql-index.html
概念: 單一索引是指索引列為一列的情況,即新建索引的語句只實施在一列上; 用戶可以在多個列上建立索引,這種索引叫做復合索引(組合索引); 復合索引在數據庫操作期間所需的開銷更小,可以代替多個單一索引; 同時有兩個概念叫做窄索引和寬索引,窄索引是指索引列為1-2列的索引,寬索引也就是索引列超過2列的索引; 設計索引的一個重要原則就是能用窄索引不用寬索引,因為窄索引往往比組合索引更有效;
使用: 創建索引 create index idx1 on table1(col1,col2,col3) 查詢 select * from table1 where col1= A and col2= B and col3 = C 這時候查詢優化器,不在掃描表了,而是直接的從索引中拿數據,因為索引中有這些數據,這叫覆蓋式查詢,這樣的查詢速度非常快;
註意事項: 1、對於復合索引,在查詢使用時,最好將條件順序按找索引的順序,這樣效率最高; select * from table1 where col1=A AND col2=B AND col3=D 如果使用 where col2=B AND col1=A 或者 where col2=B 將不會使用索引
3、復合索引會替代單一索引麽 如果索引滿足窄索引的情況下可以建立復合索引,這樣可以節約空間和時間
備註: 對一張表來說,如果有一個復合索引 on (col1,col2),就沒有必要同時建立一個單索引 on col1; 如果查詢條件需要,可以在已有單索引 on col1的情況下,添加復合索引on (col1,col2),對於效率有一定的提高 同時建立多字段(包含5、6個字段)的復合索引沒有特別多的好處,相對而言,建立多個窄字段(僅包含一個,或頂多2個字段)的索引可以達到更好的效率和靈活性
mysql復合索引