面试提问mysql一张表到底能存多少数据


Posted in MySQL onMarch 13, 2022

前言

程序员平时和mysql打交道一定不少,可以说每天都有接触到,但是mysql一张表到底能存多少数据呢?计算根据是什么呢?接下来咱们逐一探讨

1、知识准备

1.1、数据页

在操作系统中,我们知道为了跟磁盘交互,内存也是分页的,一页大小4KB。同样的在MySQL中为了提高吞吐率,数据也是分页的,不过MySQL的数据页大小是16KB。(确切的说是InnoDB数据页大小16KB)。详细学习可以参考官网 我们可以用如下命令查询到。

mysql> SHOW GLOBAL STATUS LIKE 'innodb_page_size';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| Innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.00 sec)

今天咱们数据页的具体结构指针等不深究,知道它默认是16kb就行了,也就是说一个节点的数据大小是16kb

1.2、索引结构(innodb)

mysql的索引结构咱们应该都知道,是如下的b+树结构

面试提问mysql一张表到底能存多少数据

通常b+树非叶子节点不存储数据,只有叶子节点(最下面一层)才存储数据,那么咱们说回节点,一个节点指的是(对于上图而言)

面试提问mysql一张表到底能存多少数据

每个红框选中的部分称为一个节点,而不是说某个元素。了解了节点的概念和每个节点的大小为16kb之后,咱们计算mysql能存储多少数据就容易很多了

2、具体计算方法

2.1、根节点计算

首先咱们只看根节点

比如我们设置的数据类型是bigint,大小为8b

面试提问mysql一张表到底能存多少数据

在数据本身如今还有一小块空间,用来存储下一层索引数据页的地址,大小为6kb

面试提问mysql一张表到底能存多少数据

所以我们是可以计算出来一个数据为(8b+6b=14b)的空间(以bigint为例) 我们刚刚说到一个数据页的大小是16kb,也就是(16*1024)b,那么根节点是可以存储(16*1024/(8+6))个数据的,结果大概是1170个数据 如果跟节点的计算方法计算出来了,那么接下来的就容易了。

2.2、其余层节点计算

第二层其实比较容易,因为每个节点数据结构和跟节点一样,而且在跟节点每个元素都会延伸出来一个节点,所以第二层的数据量是1170*1170=1368900,问题在于第三层,因为innodb的叶子节点,是直接包含整条mysql数据的,如果字段非常多的话数据所占空间是不小的,我们这里以1kb计算,所以在第三层,每个节点为16kb,那么每个节点是可以放16个数据的,所以最终mysql可以存储的总数据为

1170 * 1170 * 16 = 21902400 (千万级条)

其实计算结果与我们平时的工作经验也是相符的,一般mysql一张表的数据超过了千万也是得进行分表操作了。

3、总结

最后用一张图片总结一下今天讨论的内容,希望您能喜欢

面试提问mysql一张表到底能存多少数据

以上就是面试提问mysql一张表到底能存多少数据的详细内容,更多关于mysql一张表能存多少数据的资料请关注三水点靠木其它相关文章!

MySQL 相关文章推荐
linux下导入、导出mysql数据库命令的实现方法
May 26 MySQL
MySQL单表千万级数据处理的思路分享
Jun 05 MySQL
Mysql 如何查询时间段交集
Jun 08 MySQL
Mysql中调试存储过程最简单的方法
Jun 30 MySQL
为什么MySQL选择Repeatable Read作为默认隔离级别
Jul 26 MySQL
MySQL配置主从服务器(一主多从)
Aug 07 MySQL
MySQL中连接查询和子查询的问题
Sep 04 MySQL
MySQL实例精讲单行函数以及字符数学日期流程控制
Oct 15 MySQL
MySQL七种JOIN类型小结
Oct 24 MySQL
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
Dec 06 MySQL
详细介绍MySQL中limit和offset的用法
May 06 MySQL
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
Aug 14 MySQL
MySQL的索引你了解吗
面试中老生常谈的MySQL问答集锦夯实基础
浅谈如何保证Mysql主从一致
MySQL数据库如何给表设置约束详解
Mar 13 #MySQL
Mysql外键约束的创建与删除的使用
Mar 03 #MySQL
解决MySQL添加新用户-ERROR 1045 (28000)的问题
Mar 03 #MySQL
MySQL之MyISAM存储引擎的非聚簇索引详解
You might like
奇怪的PHP引用效率问题分析
2012/03/23 PHP
php 文件上传实例代码
2012/04/19 PHP
PC端微信扫码支付成功之后自动跳转php版代码
2017/07/07 PHP
一个原生的用户等级的进度条
2010/07/03 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
JavaScript中的函数模式详解
2015/02/11 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
详谈jQuery.load()和Jsp的include的区别
2017/04/12 jQuery
VueJs监听window.resize方法示例
2018/01/17 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
详解JavaScript之ES5的继承
2020/07/08 Javascript
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
零基础写python爬虫之爬虫的定义及URL构成
2014/11/04 Python
Python多线程实现同步的四种方式
2017/05/02 Python
Python模拟登陆实现代码
2017/06/14 Python
Python的地形三维可视化Matplotlib和gdal使用实例
2017/12/09 Python
Python装饰器原理与用法分析
2018/04/30 Python
python在每个字符后添加空格的实例
2018/05/07 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
python3实现高效的端口扫描
2019/08/31 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
法人委托书范本
2014/04/04 职场文书
大学生党员承诺书
2014/05/20 职场文书
优秀纪检干部材料
2014/08/27 职场文书
生物工程专业求职信
2014/09/03 职场文书
大学毕业生自我评价
2015/03/02 职场文书
聘任书格式及范文
2015/09/21 职场文书
Spring boot应用启动后首次访问很慢的解决方案
2021/06/23 Java/Android
python pygame 开发五子棋双人对弈
2022/05/02 Python