经常听到MySQL单表最多能存放2千万数据,多了就要考虑分表,依据是什么呢?
本文以MySQL为例,默认数据页大小是16KB。
索引内容结构
非叶子节点
主键+页号
假如:
主键是bigint,8bit;页号是4bit,一共12bit。一页总数:15K%12bit=1280条。
再假如每行数据大小为1Kb,每个叶子节点能存放数据就是15K%1K=15条。
一层的B+树存放数据是15
二层的B+树存放数据是1280*15
三层的B+树存放数据是1280*1280*15=2400万
因为考虑到磁盘IO性能问题,当超过3次时性能会急剧下降。如果每行数据只有250bit,单页数据可存放60条,三层B+树可存放接近1亿了,访问速度一样不会慢。