面试提问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 相关文章推荐
MySQL 可扩展设计的基本原则
May 14 MySQL
MySQL5.7并行复制原理及实现
Jun 03 MySQL
mysql 如何获取两个集合的交集/差集/并集
Jun 08 MySQL
分析mysql中一条SQL查询语句是如何执行的
Jun 21 MySQL
MySQL系列之三 基础篇
Jul 02 MySQL
QT连接MYSQL数据库的详细步骤
Jul 07 MySQL
使用ORM新增数据在Mysql中的操作步骤
Jul 26 MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 MySQL
MySQL中datetime时间字段的四舍五入操作
Oct 05 MySQL
JMeter对MySQL数据库进行压力测试的实现步骤
Jan 22 MySQL
MySQL中order by的执行过程
Jun 05 MySQL
MySQL 原理与优化之Update 优化
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完整的日历类(CLASS)
2006/11/27 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
php中设置index.php文件为只读的方法
2013/02/06 PHP
php根据生日计算年龄的方法
2015/07/13 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
2020/01/26 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
在你的网页中嵌入外部网页的方法
2007/04/02 Javascript
基于jquery的表格排序
2010/09/11 Javascript
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
2011/05/28 Javascript
教你如何终止JQUERY的$.AJAX请求
2016/02/23 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
vue.js使用3DES加密的方法示例
2018/05/18 Javascript
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
纯Python开发的nosql数据库CodernityDB介绍和使用实例
2014/10/23 Python
python计算方程式根的方法
2015/05/07 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
Python使用Excel将数据写入多个sheet
2020/05/16 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
西班牙手机之家:Phone House
2018/10/18 全球购物
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
教育英语专业毕业生的求职信
2014/03/13 职场文书
2014年党支部承诺书
2014/05/30 职场文书
关于读书的演讲稿800字
2014/08/27 职场文书
英语教师个人总结
2015/02/09 职场文书
2015年度残疾人工作总结
2015/05/14 职场文书
2015年党务工作者个人工作总结
2015/10/22 职场文书
深入解析MySQL索引数据结构
2021/10/16 MySQL