索引结构
多个字段存储一个b+树, B+树是先按 a 进行排序,然后再 a 相同的情况再按 b 字段排序
索引失效
联合索引的最左匹配原则,在遇到范围查询(如 >、<)的时候,就会停止匹配,也就是范围查询的字段可以用到联合索引,但是在范围查询字段后面的字段无法用到联合索引。
原因:出现范围查询后,后面的字段都是乱序的了,自然无法走索引
但是,对于 >=、<=、BETWEEN、like 前缀匹配这四种范围查询,并不会停止匹配。
原因:在等于的时候,后面的字段会进行匹配。
现在有一个联合索引(a,b,c)SQL: select * from a=? and b> ? and c=? 会导致失效吗?
ab会走,c不走
如何知道具体有没有走索引,走哪一个索引?
explain执行计划分析;
主要看3个字段
type,key,key_len
type的话就是实际扫描的数据,如果是all就是全表扫描,如果是count就是查询具体字段,当然还有其他几个,如index就是索引扫描,就不一一说明了。
key的话就是走的索引的名字,如果走索引的话
key_len就是走的索引字段的长度。
举个例子
联合索引abc
假设a走索引,bc没走
那么key_len等于4
因为a占4个字节