MySQL的复合索引有一个最左匹配原则,举例说明:
创建数据表如下:
添加测试数据:
创建复合索引,包含a,b,c三个字段,并查看索引性信息
<1> 使用a,b,c作为where查询条件,explain查看执行计划:使用了索引
<2> 使用a,c作为where查询条件,explain查看执行计划:使用了索引
<3> 使用a作为where查询条件,explain查看执行计划:使用了索引
<4> 使用b,c作为where查询条件,explain查看执行计划:没有使用索引,因为最左匹配原则,索引字段为”a,b,c“,a字段在最左边,
<5> 使用b作为where查询条件,explain查看执行计划:没有使用索引
<6> 使用b,c,a作为where查询条件,explain查看执行计划:使用了索引,也就是说用到索引,与where语句中字段出现的顺序无关
<7> 使用复合索引中的部分索引(最左那个字段)和没有索引的字段作为查询条件,explain查看执行计划:使用了索引
但如果使用的是复合索引中的部分索引不是最左那个字段,如b字段和不是索引的c字段作为查询条件,explain执行计划:没有用到索引!
- 补充:like的模糊查询也有一个原则:最左前缀原则,就是说like的字段值在通配符左边,如” where a like '123%' “,会用到索引:
查询字段值在通配符%右边,如” where a like ‘%123’ “,不会用到索引