找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动
查看: 14|回复: 0

为什么 MySQL 联合索引必须满足最左前缀原则?

[复制链接]

15

主题

2

回帖

179

积分

版主

积分
179
发表于 2024-10-27 19:40:19 | 显示全部楼层 |阅读模式
MySQL 中最左前缀要求的必要性
问题:
MySQL 中联合索引有最左前缀的要求,即需要查询最左边的列才能使用索引。优化器为什么不能自动调整顺序,使得满足最左前缀条件?
回答:
对最左前缀的理解有误。
如 index('user_id', 'created_at') 索引,虽然查询中 created_at 排在最左,但 user_id 同样满足最左前缀条件,因为 user_id 位于索引的最左边。
最左前缀规则如下:
  • 使用索引的查询条件中,首列必须出现在联合索引的最左边。
  • 后续列可以任意排列,只要满足第一个规则即可。
示例:
联合索引 (a, b, c) 的查询示例:
  • where a, b, c
  • where a, c
  • where a, b
  • where a
只有满足最左前缀的查询才能走索引,例如:
  • where b, c 不能走索引(因为 a 未出现)
注意:
  • where 子句中列的顺序可以任意组合,但须满足最左前缀规则。
  • order 子句中,首列也必须满足最左前缀条件。
以上就是为什么 MySQL 联合索引必须满足最左前缀原则?的详细内容

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

( 赣ICP备2023007099号-2|赣公网安备36072202000236 )

GMT+8, 2024-11-22 01:17 , Processed in 0.122220 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表