前言

你是否常常在后端圈子里听到这样的声音:“mysql 单表最好不要超过2000w”? 很多老司机对此深信不疑,但很少有人真的去验证。今天,我们将深入探讨这个问题,看看这个“2kw”的建议值是怎么来的?

1. 数据库与表结构初探

首先,为了验证,我们需要建立一个简单的表并插入大量数据。不过在此之前,先理解下数据库表在物理层面的组织方式。

2. 数据库页的组成与作用

  • 一个数据库表实际上是由许多16K大小的页组成。
  • 页在磁盘上可能是不连续的。
  • 每一页并不完全用于存储数据。有一些固定的信息,如页头、页尾、页号和校验码等。

3. 数据查询与B+树

为了快速查找数据,MySQL引入了索引,特别是B+树结构。在这里,主要区分两种节点:

  • 非叶子节点:存放主键和指向其他页的指针。
  • 叶子节点:存放实际的数据。

4. 数据存放与查询性能

当数据量逐渐增长时,B+树的层级也可能会增加。这直接影响查询性能,因为查询一个数据可能需要访问更多的页。

5. 数据量与建议值

当表数据达到大约2kw时,B+树可能就要增加到3层,从而影响查询性能。这也是为什么很多老司机推荐单表数据量不要超过2kw的原因。

6. 其他影响因素

当然,2kw只是一个推荐值。实际上,其他因素,如数据库版本、服务器配置和SQL编写方式,也会影响查询性能。此外,增加硬件配置可能会显著提高性能。

总结

MySQL的单表数据是以页的形式存放的,而查询性能与B+树的层数密切相关。2kw的建议值旨在确保高效查询,但实际应用中,还需要考虑其他因素。