说说复合索引之最左前缀原理?

分析&回答

MySQL中的索引可以以一定顺序引用多个列,这种索引叫做复合(联合)索引。

如果表 Ta 中存在索引 A、B、(C、D)

规则1:全列匹配

复制代码
SELECT * FROM Ta  WHERE E = 'F1' AND A ='10001';
复制代码

若没有按照索引顺序时,mysql查询优化器会自动的调整顺序来使用定义好的索引,如果我们将where中的条件顺序颠倒效果是一样的。

规则2:最左前缀匹配

复制代码
SELECT * FROM Ta  WHERE  A ='10001' AND B = 'B001' ;
复制代码

当查询条件精确匹配索引的左边连续一个或几个列时,只用到了索引的第一列前缀

规则3:查询条件没有指定索引第一列

复制代码
SELECT * FROM Ta  WHERE  D = 'D001' ;
复制代码

由于不是最左前缀,索引这样的查询显然用不到索引。

规则4:匹配某列的前缀字符串。

复制代码
SELECT * FROM Ta  WHERE  C LINK 'C001%' ;
复制代码

此时可以用到索引,如果通配符%不出现在开头,则可以用到索引。

规则5:范围查询(范围查询后面的列将无法使用索引)

对于范围条件查询,MYSQL无法再使用范围后面的其他索引列了。但对多个等值条件查询则没有这样的限制。

规则6:查询条件中含有函数或表达式

如果查询条件中含有函数或表达式,则MySQL不会为这列使用索引(虽然某些在数学意义上可以使用)。

反思&扩展

如何创建合理的索引,索引如何优化?

喵呜面试助手:一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!

相关推荐
yaoyouzhong44 分钟前
MySQL 批量插入详解:快速提升大数据导入效率的实战方法
大数据·数据库·mysql
东北甜妹1 小时前
MySQL主从复制
mysql
NineData1 小时前
NineData V5.0 产品发布会:让 AI 成为数据管理的驱动力,4月16日!
数据库·人工智能·ai编程
高梦轩2 小时前
PG数据库
数据库·oracle
云草桑2 小时前
DBA mssql 解决排序规则冲突 QA prod 和开发配置都是一样的服务器排序规则 为啥开发环境的的存储过程需要 加这个COLLATE Chinese_PRC_CI_AS
数据库·dba·mssql
卤炖阑尾炎2 小时前
MySQL 故障排查与生产环境优化实战指南
数据库·mysql
小陈工2 小时前
2026年4月2日技术资讯洞察:数据库融合革命、端侧AI突破与脑机接口产业化
开发语言·前端·数据库·人工智能·python·安全
solihawk3 小时前
分区大表统计信息不准确引发的性能问题
数据库
一叶飘零_sweeeet3 小时前
击穿 MySQL InnoDB MVCC 底层:从 undo log、Read View 到隔离级别的全链路深度拆解
mysql·innodb·mvcc
百结2143 小时前
postgresql日常运用
数据库·postgresql·oracle