首页 > 其他分享 >Innodb引擎中B+树一般有几层?能容纳多少数据量?

Innodb引擎中B+树一般有几层?能容纳多少数据量?

时间:2023-08-28 14:12:41浏览次数:36  
标签:几层 数据量 1170 查找 Innodb IO 数据 节点 指针

1、页

在 MySQL 中 InnoDB 存储引擎的最小存储单元是页(大小默认是16k,可通过参数设置)。页可用于存放B+树叶节点数据,也可用于存放B+树非叶节点的 “键 + 指针”(也就是路径节点)。

在查找数据时一次页的查找代表一次 IO,一般B+树高大约为1~3层,所以通过主键索引查询通常只需要 1~3 次 IO 操作即可查找到数据。

2、二分查找

索引组织表通过非叶节点的 “二分查找” 法以及指针确定数据在下一层的哪个页中,进而再去叶节点的数据页中查找到所需数据。

3、指针

一个非叶节点可容纳约1170个指针

4、 案例

假设一行记录数据大小为 1k,那么底层叶节点一页16k就能存16条记录。所以:

在2层B+树中,叶节点数*一个叶节点能存放的记录数 = 1170 * 16 = 18720条 记录数

在3层B+树中,叶节点数*叶节点数*一个叶节点能存放的记录数 = 1170 * 1170 * 16 = 21902400,2190w 条记录数

为什么MySQL用B+树而不用B树呢?

因为B树不管叶子节点还是非叶子节点,都会保存数据,这样导致在非叶子节点中能保存的指针数量变少(有些资料也称为扇出),指针少的情况下要保存大量数据,只能增加树的高度,导致IO 操作变多,查询性能变低。 

总结:

B+树叶子和非叶子结点的数据页都是16k,且数据结构一致,区别在于叶子节点放的是真实的行数据,而非叶子结点放的是主键和下一个页的地址。

B+树一般有两到三层,由于其高扇出,三层就能支持2kw以上的数据,且一次查询最多1~3次磁盘IO,性能也还行。

存储同样量级的数据,B树比B+树层级更高,因此磁盘IO也更多,所以B+树更适合成为mysql索引。

索引结构不会影响单表最大行数,2kw也只是推荐值,超过了这个值可能会导致B+树层级更高,影响查询性能。

单表最大值还受主键大小和磁盘大小限制。

 

标签:几层,数据量,1170,查找,Innodb,IO,数据,节点,指针
From: https://www.cnblogs.com/yifanSJ/p/17662132.html

相关文章

  • 二、InnoDB存储引擎
    2.3InnoDB体系架构1)后台线程MasterThread:核心线程,主要负责将缓冲池的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新、合并插入缓冲、UNDO页的回收等。IOThread:处理IO请求PurgeThread:事务被提交后,其所使用的undolog可能不再需要,因此需要PurgeThread来回收已经使......
  • 【MySQL 8.0】在组复制(MGR)的基础上创建InnoDB Cluster
    [root@node04~]#wgethttps://dev.mysql.com/get/Downloads/MySQL-Shell/mysql-shell-8.0.32-1.el7.x86_64.rpm[root@node04~]#yumlocalinstallmysql-shell-8.0.32-1.el7.x86_64.rpm-y[root@node04~]#mysqlshMySQLJS>\connectroot@node01:3306MySQL......
  • InnoDB 磁盘 I/O 和 文件空间管理
    目录InnoDB磁盘I/O预读(Read-Ahead)双写缓冲区(DoublewriteBuffer)文件空间管理页、范围、段和表空间pageExtentSegment配置保留文件段页面的百分比页面如何与表行相关最大行长度行存储策略InnoDBCheckpoints检查点处理的工作原理InnoDB磁盘I/OInnoDB尽可能使用异步磁盘I/O,......
  • InnoDB 中的死锁
    目录死锁死锁示例死锁检测禁用死锁检测如何最小化和处理死锁事务调度死锁死锁是指不同事务无法继续进行的情况,因为每个事务都持有另一个事务需要的锁。因为两个事务都在等待资源变得可用,所以都不会释放它所持有的锁。当事务锁定多个表中的多个行(通过UPDATE或SELECT...FOR......
  • InnoDB的特点
    InnoDB是MySQL中最常用和流行的存储引擎之一,它具有以下几个重要特点:事务支持:InnoDB支持ACID(原子性、一致性、隔离性和持久性)事务,可以确保数据的完整性和一致性。行级锁定:InnoDB使用行级锁定来实现并发控制,可以提供更高的并发性能,减少锁定冲突。外键约束:InnoDB支持外键......
  • InnoDB 中不同 SQL 语句设置的锁
    目录InnoDB中不同SQL语句设置的锁查询快照读(一致性读)当前读更新删除插入AUTO_INCREMENT锁定外键约束表锁InnoDB中不同SQL语句设置的锁加锁读(lockingread)、UPDATE语句或者DELETE语句通常会对在SQL语句处理过程中扫描的每个索引记录设置记录锁,即索引记录锁(indexreco......
  • InnoDB 的事务模型
    目录InnoDB事务模型事务隔离级别REPEATABLEREADREADCOMMITTEDREADUNCOMMITTEDSERIALIZABLE不加锁的一致性读取ConsistentNonlockingReads加锁的读取锁定读取示例共享模式读取加锁读取使用NOWAIT和SKIPLOCKED锁定并发读取InnoDB事务模型InnoDB事务模型旨在将多版本(m......
  • InnoDB 的锁和事务模型
    目录InnoDB的锁共享锁和独占锁意向锁记录锁间隙锁Next-Key锁插入意向锁AUTO-INC锁空间索引的断言锁InnoDB的锁InnoDB使用的锁类型包括:共享锁(sharedlock)和排它锁(exclusivelock)意向锁(intentionlock)记录锁(recordlock)间隙锁(gaplock)下一钥匙锁(next-keylock......
  • MySQL-进阶篇 ( InnoDB 引擎 )
    MySQL-进阶篇(InnoDB引擎)目录MySQL-进阶篇(InnoDB引擎)逻辑存储结构架构左侧内存结构部分:右侧磁盘结构部分:后台线程事务管理介绍回顾特性的保证redolog日志undolog日志MVCC基本概念实现原理记录中的隐藏字段undolog日志readView逻辑存储结构表空间(ibd文件......
  • InnoDB 双写缓冲区
    目录DoublewriteBuffer刷盘策略Linux上的刷新策略Windows上的刷新策略刷新策略总结双写缓冲区的配置innodb_doublewriteinnodb_doublewrite_dirinnodb_doublewrite_filesflush链表双写文件LRU链表双写文件innodb_doublewrite_pagesinnodb_doublewrite_batch_sizeDoublewrite......