关于mysql联合索引最左前缀原则的测试

in 默认分类 with 0 comment

最近在学习联合索引的最左前缀原则时发现有好几种说法不一样,于是自己动手验证了一下,mysql8.0.34,navicat16.1.5,创建数据库均为默认选项,创建表的编码格式选择utf8mb4
创建一个id作为主键,外加三个字段作为联合索引
初始test表.png
test表联合索引.png
在这个表使用EXPLAIN SELECT * from test_lianhe_index where name='',发现如预期中一样走了联合索引。
selectname1.png
运行EXPLAIN SELECT * from test_lianhe_index where age=0,发现居然也走了联合索引,但是type中显示类型与正常走联合索引不同,其类型是index,仅仅是走了一个覆盖索引,对另外一个字段单独搜索也是一样的。
seleceage1.png
经过测试,如果表中其他非主键字段全部联合在一起做联合索引,那么每次加上联合索引中最左侧的列,就可以正常走联合索引,否则就会走一个相对合适的索引数
如果加上一个为加入联合索引的列,那么情况又会发生变化
带上联合索引最左侧的项就会走联合索引,如果没有带上就会走全文索引。但是从效率上来讲,如果建立了索引123,却只是用了13,那么效率会打折,没有123效率高,理论上来讲跟只用1差不多。

Responses