从一道有趣的题目开始分析:
假设某个表有一个联合索引(c1,c2,c3,c4)以下选项哪些字段使用了该索引:
A where c1=x and c2=x and c4>x and c3=x
B where...)
创建索引:
alter table t add index c1234(c1,c2,c3,c4);
插入2条数据:insert into t VALUES(‘1′,’1′,’1′,’1′,’...1’),(‘2′,’2′,’2′,’2′,’2’)
使用MySql Explain开始分析题目结果:
A选项:
结果可以看出,c1,c2,c3,c4均使用到了该索引,而我们对A结果稍作更改:
将c2...排序其实是利用联合索引直接完成了的,即:使用了c1234联合索引,就已经使得c1下c2,c2下c3,c3下c4是有序的了,所以实际是排序利用了索引,c3字段并没有使用该索引。...c1,c2,c3,c4….cN)的联合索引,where 条件按照索引建立的字段顺序来使用(不代表and条件必须按照顺序来写),如果中间某列没有条件,或使用like会导致后面的列不能使用索引。