B 、B+树 到Innodb

本文介绍了B树和B+树的区别,强调B+树在数据存储和查找上的优势,如非叶子节点仅存储键和指向叶子节点的指针,形成有序链表。还探讨了B+树在InnoDB中的应用,解释了为何其高度通常保持在3-4层,以及InnoDB与MyISAM存储引擎的对比,指出InnoDB适用于高并发读写场景并支持事务和行锁。
摘要由CSDN通过智能技术生成

1、B树 B-树 :他们压根是一个东西
   B树英文原名 B-Tree

2、B树和B+树 为什么选择 B+树
   B树的每个节点都储存了key和value,而B+树的data存储在叶子节点上,非叶子节点存key。所以B+树的非叶子节点存储更多的key,IO操作减少。
   B+树的叶节点构成了一个有序链表,可以按照关键码排序,依次遍历全部记录,方便取键查找。而B树需要层层递归,花费时间长。

3.B+树的查找原理
   数据按主键进行排序,存放在不同的页之中。除了存放数据的页,还要存放键值和指针的页,也就是索引组织表。
   查找数据时先找根页,然后通过二分查找数据所在页的指针,然后再查找对应指针的页中的数据。

4.为什么B+树的高度总是3-4层
   innodb最小的储存单元为页,大小为16k,假设每行记录大小为1k,每页有16行记录。
非叶子节点的指针数 , 用bingint类型作为主键,8字节
指针大小为6字节,一个主键+指针的单元为14字节,
非叶子节点的总共单元为 16k/14 = 1170

   那么一颗高度为3层的B+树可以存储的数据为
1170*1170*16 = 21902400 就可以存储千万级的数据了。
对项目来说已经足够了,如果再打需要做拆分了。

5.innodb 和 Myisam

   Innodb 支

InnoDB 存储引擎选择使用 B+ 树而不是普通的 B 树(也称为 M-树)的原因主要有以下几点: 1. **顺序访问**:B+ 树的设计使得所有叶子节点都聚集在一起,这使得数据的读取更加高效。对于 InnoDB 这种频繁涉及到行级访问的场景,特别是对于范围查询和索引扫描,B+ 树提供了更好的连续性,减少了随机 I/O,从而提高性能。 2. **减少 I/O**:B+ 树的叶子节点包含了所有的数据,而 B 树可能需要多次 I/O 来获取所有数据。这在磁盘 I/O 密集型数据库中尤为重要,B+ 树的结构减少了数据检索时的寻道次数。 3. **易于合并**:InnoDB 在处理事务时,B+ 树的插入和删除操作通常涉及到多个页的修改,但这些操作可以被合并为一个批量操作,减少事务日志的写入,提高了并发性和事务性能。 4. **缓存效率**:B+ 树的结构更利于缓存,因为叶子节点通常较小且更集中,这有利于操作系统和数据库缓存机制(如 MySQLInnoDB Buffer Pool)管理。 5. **插入和删除性能**:B+ 树的插入和删除操作通常只需要对树结构做局部调整,而非 B 树的全局调整,这使得它们在大规模数据增加或减少时更加高效。 6. **自适应性**:B+ 树适合不同大小的数据集,从小表到大表都能提供良好的性能,而 B 树可能在某些特定情况下表现得不如 B+ 树。 相关问题: 1. B+ 树和 B 树的主要区别是什么? 2. 如何理解 B+ 树的叶子节点包含所有数据的设计? 3. B+ 树如何优化数据库系统的缓存策略?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值