博客
关于我
MySQL最大建议行数 2000w,靠谱吗?
阅读量:790 次
发布时间: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学习总结(78)——MySQL各版本差异整理
    查看>>
    Mysql学习总结(79)——MySQL常用函数总结
    查看>>
    Mysql学习总结(7)——MySql索引原理与使用大全
    查看>>
    Mysql学习总结(80)——统计数据库的总记录数和库中各个表的数据量
    查看>>
    Mysql学习总结(81)——为什么MySQL不推荐使用uuid或者雪花id作为主键?
    查看>>
    Mysql学习总结(82)——MySQL逻辑删除与数据库唯一性约束如何解决?
    查看>>
    Mysql学习总结(83)——常用的几种分布式锁:ZK分布式锁、Redis分布式锁、数据库分布式锁、基于JDK的分布式锁方案对比总结
    查看>>
    Mysql学习总结(84)—— Mysql的主从复制延迟问题总结
    查看>>
    Mysql学习总结(85)——开发人员最应该明白的数据库设计原则
    查看>>
    MySQL学习笔记十七:复制特性
    查看>>
    mysql安装卡在最后一步解决方案(附带万能安装方案)
    查看>>
    mysql安装和启动命令小结
    查看>>
    MySQL安装配置教程(非常详细),从零基础入门到精通,看完这一篇就够了
    查看>>
    mysql安装配置简介
    查看>>
    MySQL定义和变量赋值
    查看>>
    mysql实战01|基础架构:一条SQL查询语句是如何执行的?
    查看>>
    Mysql实战之数据备份
    查看>>
    mysql实现成绩排名
    查看>>
    Mysql客户端中文乱码问题解决
    查看>>
    mysql客户端工具使用
    查看>>