mysql的联合索引的B+树到底张什么样子?

前天在看mysql相关文章的时候,突然有个疑问,mysql的联合索引的b+树到底张什么样子啊?于是google搜了下,搜索条件是“mysql 联合索引 b+树”,结果引擎返回的第一页的结果大致都跟下面这篇文章差不多。

图片文字大致如下:


image.png

链接可参考:
https://www.cnblogs.com/wuchanming/p/9185661.html

总体的意思是 树的非叶子节点存储的是联合索引中最左面那个字段,在叶子节点存储的是联合索引的key+data域,对于这个说法,我内心是拒绝的。但是作者查询了很多资料,这我就有点纠结了。

我其实没有找到怎么查mysql索引的张什么样子的方法,我是根据以下理由推断文章是错的。

  • 我恍惚记得,mysql调优的时候大家经常说的一句就是联合索引的字段不能过多,会造成b+树的层级变高。如果按照图片上那么处理的话,显然层级是不会变的啊。
  • 另外,我请教dba朋友的时候,有个人跟我说:“这个我也不太清楚如何存储,但是我都是看这个联合索引的执行计划的key_length来确定联合索引的执行效率的。”。并且指出key_length的计算是按照联合索引中所有key占的内存长度计算的。
  • 请教n个dba朋友,他们都说不是。如图:


    image.png

    image.png

综上,那篇文章应该说的可能又问题。

我的不靠谱的结论如下:非叶子节点存储的也是联合索引key的键值对,并且按照一定的顺序在节点间排队;对于innodb,叶子节点存储的是联合索引key键值对+主键索引;对于MyISAM,叶子节点存储的是联合索引key键值对+data内存地址。

另外,有的博客提到了高性能MySQL(第3版)描述b-tree结构的时候也有所描述,截图如下:

image.png

最后最后,是我的问题太简单吗? 知乎居然给关闭了,mmb。
https://www.zhihu.com/question/304037770/answer/541460420

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容