目录
一、案例分析
1.假设数据库存在一个联合索引键:
2.使用查询语言
3.使用explain分析:
发现走的是联合索引键
4.如果只查询area
发现,仍旧走的是联合索引键
5.但是如果将area删掉,只查title
发现不走索引,走的是全表扫描
6.结论:
只有包含索引键左边的查询(area)才会走联合索引
这就是最左匹配原则的范例体现
二、最左匹配原则的概念
1.mysql会一直向右匹配直到遇到范围查询
(>、<、between、like)就停止匹配
->比如:
建立联合索引(a,b,c,d),如果查询a=3 and b=4 and c>5 and d=6,d是用不到做索引的
但是如果建立(a,b,d,c),则都可以用到,abd的顺序可以任意调整
2. = 和 in 可以乱序
比如a = 1 and b = 2 and c=3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式
三、最左匹配原则的成因
如图所示:
- 先根据Alice索引查找到所有Alice的叶子节点
- 然后根据clo2进行排序
因此查找的时候,想走clo3和clo2的联合索引就得有clo3,单单依靠clo2是没有办法去走联合索引的。
最左匹配原则的成因:
1.Mysql创建联合索引是首先会对最左边,也就是第一个索引字段进行排序
2.在第一个排序的基础上,再对第二个索引字段进行排序,其实就像是实现了Order by字段1,再Order by 字段2这样一种排序规则
3.所以第一个字段是绝对有序的,而第二个字段就是无序的了
4.因此通常情况下,直接使用第二个字段进行条件判断是用不到索引的。这就是为什么mysql要强调最左匹配原则的成因。