存储方式

我们知道mysql存储的数据在mysql的xxx.idb文件中,B+树的形式存放,如下:

每个存储的数据块通过页号关联起来,B+ 树查询效率 O(log n)。

页号结构

而每个页号的结构如下: 每个页号存储默认16kb,除去页头和目录以及校验页,剩余15kb 存储数据,我们说mysql表可以存多少数据,就是看B+树的高度和每个页号存储数据的大小。

由于数据在磁盘中也不是顺序存放的,所以B+树的高度代表则在查询数据的时候可能执行IO的次数,越高则效率越慢,一般情况三次IO比较合理,所以出现业界常说的mysql单表支持2000w数据,而据说阿里建议500w,可是实际情况存一个亿的大有人在,设置好索引,用上基因法等,也可以抗过去。

2000w来源:

一个页号中15kb存放数据,如果每行数据1kb,一个页号15条数据(B +树三层这个算出来是两千五百万)。

如果一条行数据只有250byte呢?那么就是15kb/250byte =60条数据。

所以一个表到底存放多少数据合适,还是要看表的数据内容和设计等。也见过一个表一百个字段的设计,这种情况表数据稍微多一点都慢,所以需要具体情况具体分析了。