从一道有趣的题目开始分析:
假设某个表有一个联合索引(c1,c2,c3,c4)以下选项哪些字段使用了该索引:
A where c1=x and c2=x and c4>x and c3=x
B where...index c1234(c1,c2,c3,c4);
插入2条数据:insert into t VALUES(‘1′,’1′,’1′,’1′,’1’),(‘2′,’2′,’2′,’2′,’2’)
使用MySql...下面2图我们对比下索引最左原则:
上图结果显示直接使用c3是全表查询,无法使用该索引的,所以c3字段使用索引的前提是c1,c2两字段均使用了索引。
即是索引的最左原则(左前缀原则)。...B选项:
key_len长度说明c1,c2字段用到了该索引,Extra显示并没有使用临时表进行排序,说明排序是使用了索引的,但并没有计算在key_len值中,也没有起到连接c4的作用,说明索引到c3这里是断掉的...(这段写的时候总感觉有点别扭,不知道我理解的对不对,还有待更深层次的研究)
C选项:
使用group by 一般先生成临时文件,再进行排序,但是字段顺序为c2,c3时,并没有用临时表进行排序,而是利用索引排序好的