Innodb引擎中B+树一般有几层?能容纳多少数据量?
参考:
面试题:InnoDB中B+树有几层?_Running-Waiting的博客-CSDN博客_b+树有几层
mysql单表最多两千万条数据?
先说结论:一般B+树高大约为1~3层(通过主键索引查询,通常磁盘io数为1~3次),可容纳记录数约2000w条
在 MySQL 中我们的 InnoDB 页的大小默认是 16k,当然也可以通过参数设置。
在查找数据时一次页的查找代表一次 IO,所以通过主键索引查询通常只需要 1~3 次 IO 操作即可查找到数据。
1、MySQL的InnoDB存储引擎的最小存储单元是页(大小默认是16k,可通过参数设置)。页可用于存放B+树叶节点数据,也可用于存放B+树非叶节点的 “键 + 指针”。
2、索引组织表通过非叶节点的 “二分查找” 法以及指针确定数据在下一层的哪个页中,进而再去叶节点的数据页中查找到所需数据。
一个非叶节点可容纳约1170个指针,这里假设一行记录数据大小为 1k,那么底层叶节点一页16k就能存16条记录。叶节点数 * 一个叶节点能存放的记录数 = 1170 * 16 = 18720条 记录数。具体推导过程如图:
同理可得:高度为3的B+树能存的记录数为:1170*1170*16=21902400,2190w条记录,约2000w条记录。
为什么MySQL用B+树而不用B树呢?
因为B树不管叶子节点还是非叶子节点,都会保存数据,这样导致在非叶子节点中能保存的指针数量变少(有些资料也称为扇出),指针少的情况下要保存大量数据,只能增加树的高度,导致IO 操作变多,查询性能变低。
总结:
- B+树叶子和非叶子结点的数据页都是16k,且数据结构一致,区别在于叶子节点放的是真实的行数据,而非叶子结点放的是主键和下一个页的地址。
- B+树一般有两到三层,由于其高扇出,三层就能支持2kw以上的数据,且一次查询最多1~3次磁盘IO,性能也还行。
- 存储同样量级的数据,B树比B+树层级更高,因此磁盘IO也更多,所以B+树更适合成为mysql索引。
- 索引结构不会影响单表最大行数,2kw也只是推荐值,超过了这个值可能会导致B+树层级更高,影响查询性能。
- 单表最大值还受主键大小和磁盘大小限制。
Innodb引擎中B+树一般有几层?能容纳多少数据量?相关推荐
- 为什么 select count(*) from t,在 InnoDB 引擎中比 MyISAM 慢?
统计一张表的总数量,是我们开发中常有的业务需求,通常情况下,我们都是使用 select count(*) from t SQL 语句来完成.随着业务数据的增加,你会发现这条语句执行的速度越来越慢,为什 ...
- 聊一聊 InnoDB 引擎中的索引类型
索引对数据库有多重要,我想大家都已经知道了吧,关于索引可能大家会对它多少有一些误解,首先索引是一种数据结构,并且索引不是越多越好.合理的索引可以提高存储引擎对数据的查询效率. 形象一点来说呢,索引跟书 ...
- 【MySQL】根据数据表中日期字段查询某个月每一天的数据量?查询数据表中所有日期每天的数据量?近三天每天数据量?
前提这个table有一个日期字段date_time之类的 1.根据数据表中日期字段查询某个月每一天的数据量 如果要获取8月的数据,可以这么写: SELECT count(*), DATE_FORMAT ...
- mysql innodb表移植_mysql Innodb引擎独立表空间下通过复制.ibd文件快速迁移数据文件...
假设需求:需要把库test1中的的数据迁移到test2中,并且test2中数据量特别大 硬性条件:1.mysql 使用 Innodb引擎,且开启独立表空间,2.两个库的mysql版本一致(不同版本下未 ...
- mysql innodb ibd_MySQL innodb引擎下根据.frm和.ibd文件恢复表结构和数据
记录通过.frm和.ibd文件恢复数据到本地 .frm文件:保存了每个表的元数据,包括表结构的定义等: .ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per ...
- (读书笔记)关于InnoDB引擎中的一致性锁定读
我们上篇主要讲到,在默认配置下,即事务的隔离级别为 REPEATABLE READ模式下,InnoDB 存储引擎的select操作使用一致性非锁定读 但是在某些情况下,用户需要显式地对数据库读取操作进 ...
- mysql 5.6l安装教程,Mysql中MyISAM引擎和InnoDB引擎的比较
结论 如果不清楚自己应该用什么引擎,那么请选择InnoDB,Mysql5.5+的版本默认引擎都是InnoDB,早期的Mysql版本默认的引擎是MyISAM MyISAM 和 InnoDB的适用场景 M ...
- Mysql (InnoDB引擎)聚集索引和辅助索引
聚集索引: InnoDB存储引擎表是索引组织表,即按照主键的顺序存储数据. 聚集索引(clustered index)就是按照每张表的主键构造一棵B+树,树中的叶子节点存放着表中的行记录数据,因此, ...
- MySQL存储引擎(InnoDB引擎)
本篇章主要介绍什么是 MySQL 存储引擎?常用的 MySQL 存储引擎有哪些?以及详细介绍一下目前应用最广泛的 InnoDB 存储引擎,包括其:逻辑存储结构.架构.事务原理.MVCC等. 一.初识 ...
最新文章
- angular4 表单
- Netflix如何使用机器学习来提升流媒体质量?
- 云计算的发展及应用--演讲用PPT
- 算法高级(24)-一致性哈希算法在分布式系统中的使用场景
- 95-140-106-源码-transform-算子filter
- (紫书,感谢作者)第7章暴力求解法
- C#:根据特定分隔符分割字符串
- 图解CSS3----盒子模型
- C#项目班级管理系统
- android 不同机型 bug,[Android] Opengl ES 机型适配 bug 汇总
- python输入直角三角形_如何用python做出直角三角形和其形成的锥形
- 基于echarts+html+css+jq的数据可视化大屏展示炫酷看板[附源码]
- GoFW|网页加速器
- 苏州银行对公存款业务模块维护
- 时区提示:Local time zone must be set--see zic manual page 2018的解决办法
- Python饿汉式和懒汉式单例模式的实现
- Excel实用教程-字符提取函数(FIND/LEFT/RIGHT/LEN/MID/TEXT)
- JavaScript 小数转分数
- 十一、捕鱼达人的鱼儿游泳动画
- Flutter 图片和多行文本中的第一行对齐,文字行高、行距、偏移设置