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