乐趣区

关于mysql:MySQL-索引的最左前缀原则

什么是最左前缀准则

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

应用示例

创立索引:

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

应用单列的全值匹配查问:

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

应用两列的全值匹配查问:

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

应用三列的全值匹配查问:

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


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

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

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

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


从最左前列开始,但跳过了索引中的列,能够局部应用索引:

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

退出移动版