最左前缀匹配的规则和概念在诸多文章中已经得到完整的阐述,故不再本文章中继续赘述。
本篇文章是介绍一下我在实践的过程中遇到的问题。
创建了一个 test
表,表中有 col1
、col2
、col3
这三个字段,对(col1,col2,col3)建立复合索引。执行EXPLAIN SELECT * FROM test WHERE col2 = '1';
这个语句时,本以为这是不符合最左前缀匹配原则的,因此不会命中索引,但是实践结果显示命中了索引,type 为 index。
在查询的过程中,发现针对这一现象还有一个补充,就是表中有 col1
、col2
、col3
、col4
这四个字段,对(col1,col2,col3)建立复合索引。再次执行 EXPLAIN SELECT * FROM test WHERE col2 = '1';
语句时就不会命中索引,而是ALL全表查询。
暂时只是发现了这个现象,但是查阅资料和思考并未理解其中的原理,待原理问题解决后再次补充