MySQL B+树索引深度解析:原理、最左前缀匹配与存储能力
创作时间:
作者:
@小白创作中心
MySQL B+树索引深度解析:原理、最左前缀匹配与存储能力
引用
CSDN
1.
https://m.blog.csdn.net/shouji6175/article/details/145756234
本文深入探讨了MySQL数据库中B+树索引的核心原理,包括为什么选择B+树作为索引结构、索引的最左前缀匹配原则,以及三层B+树能存储多少数据。这些内容对于理解数据库索引机制和优化查询性能具有重要参考价值。
为什么 MySQL 选择使用 B+ 树作为索引结构?
数据库索引是提高查询效率的关键技术,而B+树作为一种平衡多路查找树,因其独特的结构特点,在数据库系统中得到了广泛应用。以下是MySQL选择B+树作为索引结构的主要原因:
1.减少磁盘 I/O 次数(核心优势)
- 磁盘按页读写:磁盘的最小读写单位是页(通常 4KB-16KB),B+ 树的节点大小通常设计为等于或接近磁盘页的大小,一次 I/O 可以加载一个完整节点。
- 矮胖的多叉树结构:B+ 树的每个节点可以存储大量键值(非叶子节点不存实际数据,仅存索引),使得树的高度更低。例如,3 层高的 B+ 树可以存储数千万甚至上亿条数据,而二叉树的树高会指数级增长。
- 对比 B 树:B 树的非叶子节点存储数据,导致单个节点能容纳的键值更少,树的高度更高,I/O 次数更多。
2.范围查询的高效支持
- 叶子节点形成有序链表:B+ 树的所有叶子节点按顺序通过指针相连,范围查询(如
WHERE id BETWEEN 10 AND 20
)只需遍历链表即可完成。 - 对比 B 树:B 树的数据分散在各级节点,范围查询需要多次中序遍历,效率低下。
3.查询稳定性
- 所有数据均存储在叶子节点:无论查询哪一条数据,都需要从根节点遍历到叶子节点,路径长度严格相同,时间复杂度稳定为
O(log N)
。 - 对比 B 树:B 树的数据可能存储在非叶子节点,某些查询可能在中间层提前终止,导致不稳定。
4.更高效的存储利用率
- 非叶子节点不存数据:B+ 树的非叶子节点仅存储索引键值,因此可以容纳更多键值,进一步降低树的高度。
- 对比 B 树:B 树的非叶子节点存储数据,导致索引键值数量减少,树更高。
5.对全表扫描和排序的优化
- 叶子节点链表直接遍历:全表扫描或排序时,只需遍历叶子节点链表即可,无需回溯整棵树。
- 对比 B 树:需要遍历所有节点(包括非叶子节点)。
6.对比其他数据结构
- 哈希表:
- 优点:
O(1)
的精确查询速度。 - 缺点:不支持范围查询,无法利用索引排序,哈希冲突影响性能。
- 红黑树/二叉树:
- 优点:内存中查询高效。
- 缺点:树高增长快(
O(log N)
的基数较大),频繁的磁盘 I/O 无法接受。 - 跳表:
- 优点:插入删除灵活。
- 缺点:范围查询效率低于 B+ 树,磁盘 I/O 不友好。
7.InnoDB 的适配优化
- 聚集索引:InnoDB 的主键索引(聚集索引)直接将数据存储在叶子节点,减少一次回表查询。
- 覆盖索引:二级索引的叶子节点存储主键值,支持覆盖索引查询。
总结
B+ 树通过多叉结构减少树高、有序链表优化范围查询、稳定查询路径和适配磁盘 I/O 特性,成为数据库索引的理想选择。虽然某些场景下其他数据结构(如哈希表)可能有更好的局部性能,但 B+ 树在综合场景中表现最优。
MySQL 索引的最左前缀匹配原则是什么?
在使用MySQL的B+树索引时,最左前缀匹配原则是一个重要的概念,它决定了查询条件如何与索引进行匹配。以下是该原则的详细解释:
一、索引的 B+ 树结构基础
- B+ 树的层次结构和叶子节点
- 索引在数据库中通常以 B+ 树的形式存在。B+ 树是一种平衡树,其所有有效的数据(即指向实际数据行的指针或实际数据本身)都存储在叶子节点上,非叶子节点仅存储索引键和指向下一层节点的指针。
- Range 查询和确切匹配查询
- 当进行确切匹配查询时(如查询一个具体的 a, b, c 值组合),数据库可以通过 B+ 树快速定位到对应的叶子节点。
- 对于范围查询(如查询 a 的一个范围),则可以在 B+ 树中找到符合条件的起始位置和结束位置,然后遍历对应的叶子节点进行数据查询。
二、最左前缀匹配原则的定义
- 最左优先原则
- 当使用联合索引时,查询条件必须满足最左前缀的条件才能使用索引。即查询条件的列顺序必须从联合索引的最左列开始,并且连续使用。
- 例如,联合索引(a, b, c)可以支持以下查询模式:
- 查询 a 的条件,如
WHERE a = 1
。 - 查询 a 和 b 的条件,如
WHERE a = 1 AND b = 2
。 - 查询 a 的范围条件并结合后面的列,如
WHERE a > 1 AND b = 2
(这里的 a 的范围查询会扫描 a 满足条件的部分,然后根据 b 的值进一步查找)。 - 无效的前缀使用情况
- 如果查询条件中没有包含联合索引的最左列,则无法使用该联合索引。例如,对于联合索引(a, b, c):
- 查询条件为
WHERE b = 2
时,无法使用该联合索引,因为缺少最左列 a。 - 查询条件为
WHERE c = 3
也无法使用此联合索引。
三、例外情况
- 前缀索引和全文索引
- 对于前缀索引(仅索引列的前缀部分)和全文索引,它们的匹配原则有所不同,不完全遵循最左前缀匹配原则。
- 查询优化器的决策
- MySQL 的查询优化器会综合考虑多种因素(如数据量、统计信息等)决定是否使用索引。即使满足最左前缀匹配原则,也不一定会使用索引,需要根据具体情况进行分析。
五、总结
最左前缀匹配原则要求在使用联合索引时,查询条件必须从联合索引的最左列开始,并且连续使用索引列,才能有效利用索引。了解并遵循这一原则,可以提高查询效率,避免不必要的全表扫描。
MySQL 三层 B+ 树能存多少数据?
在实际应用中,了解B+树的存储能力对于数据库设计和性能优化非常重要。以下是关于三层B+树存储能力的详细分析:
一、基本概念
- B+ 树的高度:B+ 树的高度是从根节点到叶子节点的层数。在实际应用中,MySQL 的 B+ 树高度通常为 3 到 4 层。
- 每个节点的存储:每个节点(如页面)可以存储多个键值和指针。具体的存储数目取决于数据类型和存储引擎的页面大小。
二、估算存储容量
- 假设条件:
- 假设 MySQL 使用 InnoDB 存储引擎,其默认页面大小为 16KB(即 16384 字节)。
- 假设索引键类型为整型,每个键值大小为 4 字节,每个指针大小为 6 字节。
- 除去页面中的开销(如存储一些头信息等),实际用于存储键值和指针的空间可能为 16384 字节 - 一定的开销(例如 100 字节)≈ 16284 字节。
- 计算示例:
- 一个页面中可以存储的键值数目 = 页面可用空间 / (键值大小 + 指针大小)。
- 即:16284 ÷ (4 + 6) ≈ 1628 个。
三、三层 B+ 树的存储量估算
- 根节点(第 1 层):根节点通常是一个页面,可以存储约 1628 个键值和对应的指针。
- 中间节点(第 2 层):每个中间节点页面可以存储约 1628 个键值和指针。根节点指向的页面数目为 1628,所以中间节点的页面数目为 1628。
- 中间节点的叶节点数目为 1628 × 1628 ≈ 2,651,184。
- 叶子节点(第 3 层):每个叶子节点页面可以存储约 1628 条记录。因此,总的记录数目为:
- 2,651,184(中间节点叶节点数目)× 1628(每页记录数)≈ 4,314,853,052 条记录,即大约 43 亿条记录。
四、总结
- 三层 B+ 树能够存储的数据量是非常庞大的,理论上在一个理想化的单表场景下,三层 B+ 树可以存储约 43 亿条 4 字节整型键值的数据。
- 但实际上,MySQL 数据库的表存储数据不会只依靠三层 B+ 树来存储,因为这涉及存储管理、数据分布以及数据库的整体设计。而且,实际应用中存储的数据类型可能更复杂,占用更多的空间,因此实际存储的数据量会小于理论值。
因此,三层 B+ 树在 MySQL 中能够存储的数据量通常在数千万到数亿条记录之间,具体数值需要根据键值大小、页面大小、存储引擎等因素来精确计算。
热门推荐
票面利率是什么?详解票面利率的计算方法及其对债券市场的影响
四川人为何只说“儿豁”没有“女豁”,这并不是性别歧视
房屋过户手续及所需材料全解析
属火命人八字修行指南:如何根据五行理论调整生活与修行
哪些条款是现金管理暂行条例的核心内容?
玻璃:持久性的材料
久坐危害太驚人!上班坐太久肩頸痛 中醫教你疏通「1條經脈」化解硬結
姜粉泡脚的功效与注意事项
大便像羊屎一样一粒一粒怎么办?原因分析与改善建议
从西周青铜铭文到现代铜版婚书:婚书的千年演变史
“中间户”和“边户”哪个好?换了才知道,原来差距这么大
瞳孔正常直径:定义、影响因素与健康关系
9个助眠瑜伽姿势,睡前15分钟,初学者马上学会
女生学数学的方法 有哪些技巧
固态电池的未来:2035年将迎来成本大幅下降的新时代
苏州园区公务员与姑苏区事业编待遇揭秘:2024年薪酬概览
直说了!近视手术也有限制,不满足这6个条件,医生不让你做……
南方人的噩梦——回南天,该如何应对?
建筑智能化概论:未来建筑的智慧之路
什么是空燃比
云山之战:志愿军首战美军,重创骑一师,全歼第三营
高考成绩查询指南:多种方式助你轻松获取成绩信息
你所在的地方排第几?一起来探索中国省份和城市营商环境数据库
房贷没还清能办房产证吗?办理流程详解
如何看待日本GDP全球排名的世纪沉浮
贫困诗文合集:从两汉到清代的底层生活写照
全球粮食自给率大揭秘:从日本到中国的粮食安全挑战与机遇
迈克耳孙干涉仪白光等倾干涉的实现、条纹特征及形成机理
一文读懂生物塑料、生物基塑料、生物降解塑料的区别
什么是维权救济渠道