最左前缀法则是空穴来风吗🤨

  • 联合索引的 B+ 树结构和一个字段的索引 B+ 树结构大概上只有叶子节点是不同的,联合索引有一个最左前缀法则,给人感觉就是它生来就有,但是如果结合 InnoDB 引擎下的 B+ 树索引结构反推一下可能会发现一些相似的地方,
截屏2024-10-22 17.20.17.png
  • 一个字段的索引的 B+ 树中普通节点会存储 索引字段值和子节点的指针,叶子节点会存储索引字段值和主键值

  • 最左前缀法则的要求是使用联合索引时查询条件必须包含最左边的索引,然后依次递推

  • 为什么一定要最左边的索引,我们可以合理猜想 用这个字段单独建立一个索引,这个单独字段的 B+ 树的一般节点和联合索引的 B+ 树中的一般节点 是基本一样的,比如有联合索引 (a, b c) 和 单独索引 a, 这两个的 B+ 树一般节点是基本一样的,那么 (b, c)去哪里了捏?显然也只有叶子节点可以存放他们,并且他们是按照你指定的顺序排序存放的

image.png
  • 此时如果只存在 (a, b, c),我仅仅使用 b 去查询而不是 a,b 去查询,根本就无法使用这个 联合索引中的 (b) 这个联合索引必须要提供 a 的条件来确定叶子节点的范围,然后去遍历比对 b 条件
image.png

总结一下

  • 所有的索引(x1, x2, x3, ----- Xn)都是以 x1 字段建立 B+ 树,其余的字段会作为叶子节点的排序条件,
  • 叶子节点的排序条件为 order by x1, x2, x3, ---- Xn (asc desc 个人指定)
  • 查询时会先按照 x1 去确定叶子节点的范围,然后去遍历比对接下来的条件
  • 联合索引是单字段索引的延伸
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP