MySql索引详情分析

索引是帮助MySql高效获取数据的排好序的数据结构。(B+tree)
为何是B+Tree这个数据结构呢?

  1. 二叉树:对于单边增值的数据会造成数据倾斜,最终导致数据查询效率不高。

  2. 红黑树:对于数据量大的时候树的高度会很高,也会导致查找次数变高。

  3. B-Tree

  • 叶节点具有相同的深度,叶节点的指针为空。
  • 所有索引元素不重复
  • 节点中的数据索引从左到右递增排列
  1. B+Tree(B-Tree变种)
  • 非叶子节点不存储data,只存储索引的,这样就可以放更多的索引。
  • 叶子节点包含所有索引字段。
  • 叶子节点用指针连接,提高区间的访问的性能。

这里一个节点的大小为16384字节相当于16kb的大小。所以一个非叶子节点可以放1170个元素,整个B+Tree(三层)满了大概可以放2000万的数据。1170117016

mysql为什么使用了b+tree而不是b-tree?

  • 由于b+tree非叶子节点不存储 data,所以一个存储页可以存储更多的非叶子节点,也就是说使用 b+树单次磁盘 I/O拿到的同大小存储页中包含的信息量相比 b-树更大,所以减少了同样数据量下每次查询的io次数。
  • MySQL 是关系型数据库,经常会按照区间来访问某个索引列,B+树的叶子节点间按顺序建立了链指针,加强了区间访问性,所以 B+树对索引列上的区间范围查询很友好。而 B 树每个节点的 key 和 data 在一起,无法进行区间查找。
posted @   程序马2023  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示