什么是最左前缀准则
如果一个索引蕴含了多个列,查问必须从索引的最左前列开始,并且不能跳过索引中的列。
应用示例
创立索引:
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';