面试提问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 02 MySQL
MySQL 使用自定义变量进行查询优化
May 14 MySQL
MySQL 时间类型的选择
Jun 05 MySQL
MySQL8.0.18配置多主一从
Jun 21 MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 MySQL
MySQL数据库中varchar类型的数字比较大小的方法
Nov 17 MySQL
MySQL Innodb索引机制详细介绍
Nov 23 MySQL
MYSQL如何查看进程和kill进程
Mar 13 MySQL
Mysql 如何合理地统计一个数据库里的所有表的数据量
Apr 18 MySQL
MySQL 执行数据库更新update操作的时候数据库卡死了
May 02 MySQL
Mysql 一主多从的部署
May 20 MySQL
delete in子查询不走索引问题分析
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 4.2书写安全的脚本
2006/10/09 PHP
PHP 一个比较完善的简单文件上传
2010/03/25 PHP
PHP中Date()时间日期函数的使用方法小结
2011/04/20 PHP
教你如何解密 “ PHP 神盾解密工具 ”
2014/06/20 PHP
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
jquery ajax属性async(同步异步)示例
2013/11/05 Javascript
setInterval()和setTimeout()的用法和区别示例介绍
2013/11/17 Javascript
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
jQuery.Form上传文件操作
2017/02/05 Javascript
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
webpack配置导致字体图标无法显示的解决方法
2018/03/06 Javascript
Vue 中使用 CSS Modules优雅方法
2018/04/09 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
vue瀑布流组件实现上拉加载更多
2020/03/10 Javascript
python数据预处理 :数据共线性处理详解
2020/02/24 Python
python Xpath语法的使用
2020/11/26 Python
Python LMDB库的使用示例
2021/02/14 Python
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
html5利用canvas实现颜色容差抠图功能
2019/12/23 HTML / CSS
澳大利亚领先的睡衣品牌:Peter Alexander
2016/08/16 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
承诺书的格式范文
2014/03/28 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
英镑符号 £
2022/02/17 杂记