面试提问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 10 MySQL
MySQL如何构建数据表索引
May 13 MySQL
详解MySQL中的主键与事务
May 27 MySQL
MySQL深度分页(千万级数据量如何快速分页)
Jul 25 MySQL
MySQL子查询中order by不生效问题的解决方法
Aug 02 MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 MySQL
关于MySQL中的 like操作符详情
Nov 17 MySQL
mysql 联合索引生效的条件及索引失效的条件
Nov 20 MySQL
Mysql事务索引知识汇总
Mar 17 MySQL
MySQL磁盘碎片整理实例演示
Apr 03 MySQL
解决MySQL Varchar 类型尾部空格的问题
Apr 06 MySQL
Mysql查询时间区间日期列表,不会由于数据表数据影响
Apr 19 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/08/07 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
在UpdatePanel内jquery easyui效果失效的解决方法
2010/04/11 Javascript
window.opener用法和用途实例介绍
2013/08/19 Javascript
当鼠标滑过文本框自动选中输入框内容的JS代码分享
2013/11/26 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
jQuery制作简洁的多级联动Select下拉框
2014/12/23 Javascript
Javascript 拖拽的一些简单的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
深入理解Vue-cli搭建项目后的目录结构探秘
2017/07/13 Javascript
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
JavaScript实现图片的放大缩小及拖拽功能示例
2019/05/14 Javascript
ES6 Promise对象的应用实例分析
2019/06/27 Javascript
package.json配置文件构成详解
2019/08/27 Javascript
详解javascript中var与ES6规范中let、const区别与用法
2020/01/11 Javascript
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
python中函数总结之装饰器闭包详解
2016/06/12 Python
python 实现dict转json并保存文件
2019/12/05 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
大学生职业规划前言模板
2013/12/27 职场文书
内衣营销方案
2014/03/15 职场文书
新学期开学标语
2014/06/30 职场文书
新农村建设汇报材料
2014/08/15 职场文书
舌尖上的中国观后感
2015/06/02 职场文书
党支部鉴定意见
2015/06/02 职场文书
oracle通过存储过程上传list保存功能
2021/05/12 Oracle
Python Django ORM连表正反操作技巧
2021/06/13 Python
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技