什么是最左前缀原则

如果一个索引包含了多个列,查询必须从索引的最左前列开始,并且不能跳过索引中的列。

使用示例

创建索引:

ALTER TABLE `staffs` ADD INDEX idx_staffs_nameAgePos(`name`, `age`, `pos`);

使用单列的全值匹配查询:

EXPLAIN SELECT * FROM staffs WHERE `name`='July';

1611475610502.png

使用两列的全值匹配查询:

EXPLAIN SELECT * FROM staffs WHERE `name`='July' AND age=25;

1611475644285.png

使用三列的全值匹配查询:

EXPLAIN SELECT * FROM staffs WHERE `name`='July' AND age=25 AND pos='dev';

1611475682257.png


不是从最左前列开始,不能使用索引:

EXPLAIN SELECT * FROM staffs WHERE age=25 AND pos='dev';

1611475791647.png

不是从最左前列开始,不能使用索引:

EXPLAIN SELECT * FROM staffs WHERE pos='dev';

1611475860085.png


从最左前列开始,但跳过了索引中的列,可以部分使用索引:

EXPLAIN SELECT * FROM staffs WHERE `name`='July' AND pos='dev';

1611476382053.png


小伍
139 声望4 粉丝