理论上来说,只要磁盘足够,存多少数据都可以。随着数据量的增多,查询效率是会下降的,单表抗2000w数据量,通过索引查询问题不大。但是如何计算出这个数据呢?
从B+数存储的角度分析
B+数高度限制
B+树是InnoDB存储引擎使用的索引结构,我们知道,表中数据量的增加,B+树的高度也会增加。如果B+树的高度过高,每次查询需要经过比较多的层级,会导致查询性能下降。对于B+树高度限制,一般控制在3到4层以内。
InnoDB数据页
我们都知道,InnoDB数据页的默认大小是16KB,且B+树的每个节点都对应着一个数据页(包括根节点、非叶子节点和叶子结点。),非叶子节点存储着主键+指向子节点(其他数据页)的指针。
计算
基于上述了解,就可以基于B+树的高度结构,及其数据页的大小,来计算单标数据量
计算公式
存储数据记录 = 叶子结点的数量 * 每个叶子节点中能存储的数量
叶子节点的数量 = 根节点下第一层非叶子节点的数量 ^ (树高度 - 1)
非叶子节点的数量
已知根节点存储量是16KB,并且作为非叶子节点,只需要存储一个主键 + 一个指针。例如一个bigint类型的主键(8字节),和默认6字节的指针,存储公式如下:
16 * 1024 / (8+6) = 1170
根节点可扩展出1170个二层高度的子节点,而三层B+树则会有两层非叶子节点。最终关联出: 1170 * 1170 = 1368900个叶子结点
叶子结点存储行数
一个叶子节点有16KB,假设单行数据量为1KB,那么就能存储16条。单条数据量为500B就能存储32条。
计算结果
基于上述计算方式,例如单条数据的存储空间是1KB,3层高度的B+树存储量为:
1170 * 1170 * 16 = 21902400,即2000w。