面试提问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基础之常见函数
Apr 22 MySQL
正确使用MySQL update语句
May 26 MySQL
MySQL中日期型单行函数代码详解
Jun 21 MySQL
MySQL修炼之联结与集合浅析
Oct 05 MySQL
MySQL8.0升级的踩坑历险记
Nov 01 MySQL
mysql中varchar类型的日期进行比较、排序等操作的实现
Nov 17 MySQL
深入讲解数据库中Decimal类型的使用以及实现方法
Feb 15 MySQL
MYSQL如何查看进程和kill进程
Mar 13 MySQL
在MySQL中你成功的避开了所有索引
Apr 20 MySQL
MySQL 语句执行顺序举例解析
Jun 05 MySQL
sql注入报错之注入原理实例解析
Jun 10 MySQL
Mysql的Table doesn't exist问题及解决
Dec 24 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连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
PHP调用MySQL存储过程并返回值的方法
2014/12/26 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
java script编程起步(第三课)
2007/01/10 Javascript
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
JavaScript this 深入理解
2009/07/30 Javascript
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
2010/04/01 Javascript
Javascript 垃圾收集机制介绍理解
2013/05/14 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
2016/04/18 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
详解用webpack2搭建angular2的项目
2017/06/22 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
详解vue 组件之间使用eventbus传值
2017/10/25 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
html5中去掉input type date默认样式的方法
2018/09/06 HTML / CSS
浅谈pc和移动端的响应式的使用
2019/01/03 HTML / CSS
关键字throw与throws的用法差异
2016/11/22 面试题
学习三严三实心得体会
2014/10/13 职场文书
招商引资工作汇报
2014/10/28 职场文书
结婚典礼主持词
2015/06/29 职场文书
2015年党风廉政建设个人总结
2015/08/18 职场文书
员工担保书范本
2015/09/22 职场文书
《少年闰土》教学反思
2016/02/18 职场文书
python 如何执行控制台命令与操作剪切板
2021/05/20 Python
十大最强电系宝可梦,阿尔宙斯电系之一,第七被称为雷神
2022/03/18 日漫
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL