浅谈mysql一张表到底能存多少数据

 更新时间:2021年03月19日 08:55:15   作者:程序员养成日记  
这篇文章主要介绍了浅谈mysql一张表到底能存多少数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

程序员平时和mysql打交道一定不少,可以说每天都有接触到,但是mysql一张表到底能存多少数据呢?计算根据是什么呢?接下来咱们逐一探讨

知识准备

数据页

在操作系统中,我们知道为了跟磁盘交互,内存也是分页的,一页大小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

索引结构(innodb)

mysql的索引结构咱们应该都知道,是如下的b+树结构

通常b+树非叶子节点不存储数据,只有叶子节点(最下面一层)才存储数据,那么咱们说回节点,一个节点指的是(对于上图而言)

每个红框选中的部分称为一个节点,而不是说某个元素。了解了节点的概念和每个节点的大小为16kb之后,咱们计算mysql能存储多少数据就容易很多了

具体计算方法

根节点计算

首先咱们只看根节点

比如我们设置的数据类型是bigint,大小为8b

在数据本身如今还有一小块空间,用来存储下一层索引数据页的地址,大小为6kb

所以我们是可以计算出来一个数据为(8b+6b=14b)的空间(以bigint为例)我们刚刚说到一个数据页的大小是16kb,也就是(161024)b,那么根节点是可以存储(161024/(8+6))个数据的,结果大概是1170个数据如果跟节点的计算方法计算出来了,那么接下来的就容易了。

其余层节点计算

第二层其实比较容易,因为每个节点数据结构和跟节点一样,而且在跟节点每个元素都会延伸出来一个节点,所以第二层的数据量是1170*1170=1368900,问题在于第三层,因为innodb的叶子节点,是直接包含整条mysql数据的,如果字段非常多的话数据所占空间是不小的,我们这里以1kb计算,所以在第三层,每个节点为16kb,那么每个节点是可以放16个数据的,所以最终mysql可以存储的总数据为

1170 * 1170 * 16 = 21902400 (千万级条)

其实计算结果与我们平时的工作经验也是相符的,一般mysql一张表的数据超过了千万也是得进行分表操作了。

总结

最后用一张图片总结一下今天讨论的内容,希望您能喜欢

到此这篇关于浅谈mysql一张表到底能存多少数据的文章就介绍到这了,更多相关mysql表存多少数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解mysql8.018在linux上安装与配置过程

    详解mysql8.018在linux上安装与配置过程

    这篇文章主要介绍了mysql8.018在linux上安装与配置过程,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 详解MySQL查看执行慢的SQL语句(慢查询)

    详解MySQL查看执行慢的SQL语句(慢查询)

    查看执行慢的SQL语句,需要先开启慢查询日志,MySQL的慢查询日志,记录在MySQL中响应时间超过阀值的语句(具体指运行时间超过long_query_time值的SQL,本文给大家介绍MySQL查看执行慢的SQL语句,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • SQL触发器定义与使用

    SQL触发器定义与使用

    SQL的触发器和存储过程一样,都是嵌入到SQL中的一段程序,是SQL中管理数据的有力工具,本文给大家详细介绍SQL触发器的定义语法知识,感兴趣的朋友一起看看吧
    2023-01-01
  • 详解MySQL监控工具 mysql-monitor

    详解MySQL监控工具 mysql-monitor

    这篇文章主要介绍了解MySQL监控工具 mysql-monitor的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-07-07
  • MySQL学习(七):Innodb存储引擎索引的实现原理详解

    MySQL学习(七):Innodb存储引擎索引的实现原理详解

    这篇文章主要介绍了Innodb存储引擎索引的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 使用mss2sql工具将SqlServer转换为Mysql全记录

    使用mss2sql工具将SqlServer转换为Mysql全记录

    上篇文章我们讲诉了在mssql数据转换成mysql数据中,用Navicat Premium导入数据很完美,但是创建表的时候数据类型转换不是很完美,本文我们来讲诉下用mss2sql工具来创建表,顺便说下导入数据
    2014-08-08
  • MySQL中表复制:create table like 与 create table as select

    MySQL中表复制:create table like 与 create table as select

    这篇文章主要介绍了MySQL中表复制:create table like 与 create table as select,需要的朋友可以参考下
    2014-12-12
  • Mysql服务器的启动与停止(一)

    Mysql服务器的启动与停止(一)

    Mysql服务器的启动与停止(一)...
    2006-11-11
  • MySQL用户权限设置保护数据库安全

    MySQL用户权限设置保护数据库安全

    MySQL用户权限设置是保护数据库安全的重要措施之一。通过为用户设置不同的权限,可以控制用户对数据库的访问能力,包括读取、修改、删除、创建等操作。合理设置用户权限可以避免误操作、非法访问等安全问题
    2023-05-05
  • Windows mysql 双向同步设置方法 详细篇

    Windows mysql 双向同步设置方法 详细篇

    如果你需要windows mysql 主、备机双向同步环境,可按照以下步骤进行操作
    2011-05-05

最新评论