面试提问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 相关文章推荐
left join、inner join、right join的区别
Apr 05 MySQL
mysql部分操作
Apr 05 MySQL
详解MySQL InnoDB存储引擎的内存管理
Apr 08 MySQL
MySQL如何构建数据表索引
May 13 MySQL
详解MySQL中的主键与事务
May 27 MySQL
MYSQL(电话号码,身份证)数据脱敏的实现
May 28 MySQL
MySQL 常见的数据表设计误区汇总
Jun 07 MySQL
新手入门Mysql--sql执行过程
Jun 20 MySQL
Mysql数据库按时间点恢复实战记录
Jun 30 MySQL
MySQL外键约束(FOREIGN KEY)案例讲解
Aug 23 MySQL
mysql 乱码 字符集latin1转UTF8
Apr 19 MySQL
Mysql数据库group by原理详解
Jul 07 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面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
2010/02/15 Javascript
DOM 中的事件处理介绍
2012/01/18 Javascript
jQuery根据纬度经度查看地图处理程序
2013/05/08 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
jquery固定底网站底部菜单效果
2013/08/13 Javascript
使用firebug进行调试javascript的示例
2013/12/16 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
详解JS函数重载
2014/12/04 Javascript
纯js实现仿QQ邮箱弹出确认框
2015/04/29 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
javascript实现网页字符定位的方法
2015/07/14 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
使用开源工具制作网页验证码的方法
2016/10/17 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
利用vue + koa2 + mockjs模拟数据的方法教程
2017/11/22 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
Python正则表达式教程之二:捕获篇
2017/03/02 Python
Python递归实现汉诺塔算法示例
2018/03/19 Python
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
PyTorch中permute的用法详解
2019/12/30 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
2020/01/18 Python
Pythonic版二分查找实现过程原理解析
2020/08/11 Python
HTML5学习笔记之History API
2015/02/26 HTML / CSS
自我推荐信范文
2014/05/09 职场文书
供用电专业求职信
2014/07/07 职场文书
2015年酒店工作总结
2015/04/28 职场文书
黑白记忆观后感
2015/06/18 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
golang日志包logger的用法详解
2021/05/05 Golang