联合索引和单列索引
1. 首先对于单列索引来说,它比较适合建在重读度低的列上。
2. 联合索引又叫复合索引,它是对多个字段同时建立的索引(有顺序,ABC,ACB是完全不同的两种联合索引)。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 建立这样的索引相当于建立了索引a、ab、abc三个索引。可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。注意:索引列越多通过索引筛选出的数据越少。
3. 覆盖(动词)索引:同样的有联合索引(a,b,c),如果有如下的sql: select a,b,c from table where a=xxx and b = xxx。那么MySQL可以直接通过遍历索引取得数据,而无需读表,这减少了很多的随机io操作。
4. 使用时注意什么
1.单个索引需要注意的事项,组合索引全部通用。比如索引列不要参与计算啊、or的两侧要么都索引列,要么都不是索引列啊、模糊匹配的时候%不要在头部啦等等
2.最左匹配原则。(A,B,C) 这样3列,mysql会首先匹配A,然后再B,C. 如果用(B,C)这样的数据来检索的话,就会找不到A使得索引失效。如果使用(A,C)这样的数据来检索的话,就会先找到所有A的值然后匹配C,此时联合索引是失效的。
3.把最常用的,筛选数据最多的字段放在左侧。