博客
关于我
MySQL最大建议行数 2000w,靠谱吗?
阅读量:789 次
发布时间:2023-02-12

本文共 1133 字,大约阅读时间需要 3 分钟。

MySQL 单表数据量的极限探索

在数据库领域,关于“单表最大数据量”的讨论从来都不是一成不变的。很多人都听说“一个表不应超过 2000 万行”,但这种说法背后的原理和实际表现却值得深入探讨。

数据存储的物理基础

MySQL 中的数据以页为单位存储,一个页的大小通常为 16KB。每个页中存储的信息不仅包括数据本身,还包括校验码、页目录等固定信息。具体来说,一个页大约分为以下几个部分:

  • File Header (38 byte):存储页的基本信息,如页号、数据长度等。
  • Page Header (56 byte):记录该页的起始记录 ID、父节点信息等。
  • Infimum + Supremum (26 byte):用于标识该页是否为叶子节点(数据页)或内部节点(索引页)。
  • File Trailer (8 byte):存储页的检查和校验信息。
  • 此外,每个页还包含一个 Page Directory,用于记录该页对其他页的索引信息。

    索引的结构与查询性能

    在 InnoDB 存储引擎中,索引的存储结构与数据页几乎一致,同样由 B+ 树实现。每个索引页除了记录主键 ID 和对应页号之外,还包含层级信息,用于加速查询。

    以下是查询过程的简要示意:

  • 顶层索引页:根据主键 ID 选择相应的子节点。
  • 中间索引页:继续根据当前范围选择下一个子节点。
  • 叶子节点数据页:最终找到目标数据行。
  • 需要注意的是,B+ 树的层数越高,查询次数越多,磁盘 IO 操作也越多,查询性能会显著下降。

    单表的物理极限

    假设一个数据库表的主键为无符号大整数,每秒插入一条记录,最大可存储的数据量可以通过以下公式计算:

    [ \text{Total} = x^{(z-1)} \times y ]

    其中:

    • ( x ):每个非叶子节点能存储的子节点数量。
    • ( z ):B+ 树的层数。
    • ( y ):每个叶子节点能存储的数据行数。

    根据以上公式,当 B+ 树层数为 3 层时,最大建议值约为 2000 万行。这也就是传统上所说的“单表不超过 2000 万行”的建议值。

    数据量与查询性能的平衡

    实际中,单表的最大数据量并非硬性限制,而是与查询性能有关。过多的数据可能导致索引页过于庞大,影响查询效率。因此,需要根据具体需求和硬件配置来权衡数据量和性能。

    GitHub 仓库推荐

    如果你对技术书籍感兴趣,可以访问以下 GitHub 仓库,里面包含了丰富的技术资源:

    GitHub - biaoyutiao: 300+经典计算机书籍 PDF

    里面收录了 C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生等核心知识点的经典书籍 PDF,持续更新中~

    转载地址:http://lndfk.baihongyu.com/

    你可能感兴趣的文章
    Mysql学习总结(23)——MySQL统计函数和分组查询
    查看>>
    Mysql学习总结(24)——MySQL多表查询合并结果和内连接查询
    查看>>
    Mysql学习总结(25)——MySQL外连接查询
    查看>>
    Mysql学习总结(26)——MySQL子查询
    查看>>
    Mysql学习总结(27)——Mysql数据库字符串函数
    查看>>
    Mysql学习总结(28)——MySQL建表规范与常见问题
    查看>>
    Mysql学习总结(2)——Mysql超详细Window安装教程
    查看>>
    Mysql学习总结(30)——MySQL 索引详解大全
    查看>>
    Mysql学习总结(31)——MySql使用建议,尽量避免这些问题
    查看>>
    Mysql学习总结(33)——阿里云centos配置MySQL主从复制
    查看>>
    Mysql学习总结(37)——Mysql Limit 分页查询优化
    查看>>
    Mysql学习总结(38)——21条MySql性能优化经验
    查看>>
    Mysql学习总结(39)——49条MySql语句优化技巧
    查看>>
    Mysql学习总结(3)——MySql语句大全:创建、授权、查询、修改等
    查看>>
    Mysql学习总结(40)——MySql之Select用法汇总
    查看>>
    Mysql学习总结(41)——MySql数据库基本语句再体会
    查看>>
    Mysql学习总结(42)——MySql常用脚本大全
    查看>>
    Mysql学习总结(43)——MySQL主从复制详细配置
    查看>>
    Mysql学习总结(44)——Linux下如何实现mysql数据库每天自动备份定时备份
    查看>>
    Mysql学习总结(45)——Mysql视图和事务
    查看>>