MySql索引详情分析
索引是帮助MySql高效获取数据的排好序的数据结构。(B+tree)
为何是B+Tree这个数据结构呢?
-
二叉树:对于单边增值的数据会造成数据倾斜,最终导致数据查询效率不高。
-
红黑树:对于数据量大的时候树的高度会很高,也会导致查找次数变高。
-
B-Tree
- 叶节点具有相同的深度,叶节点的指针为空。
- 所有索引元素不重复
- 节点中的数据索引从左到右递增排列
- 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 在一起,无法进行区间查找。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App