文章首发地址
在中国互联网技术圈流传着这么一个说法:MySQL 单表数据量大于 2000 万行,性能会明显下降。事实上,这个传闻据说最早起源于百度。具体情况大概是这样的,当年的 DBA 测试 MySQL性能时发现,当单表的量在 2000 万行量级的时候,SQL 操作的性能急剧下降,因此,结论由此而来。然后又据说百度的工程师流动到业界的其它公司,随之也带去了这个信息,所以,就在业界流传开这么一个说法。再后来,阿里巴巴《Java 开发手册》提出单表行数超过 500 万行或者单表容量超过2GB,才推荐进行分库分表。对此,有阿里的黄金铁律支撑,所以,很多人设计大数据存储时,多会以此为标准,进行分表操作。
有业界传说和阿里巴巴的开发手册支撑,这个结论应该是靠谱的,毕竟实践出真知,但这背后的原理是什么呢,目前我们用的MYSQL大部分都是InnoDB引擎,现在我们就从InnoDB引擎说起来扒一扒为什么单表数据在2000W+后会明显下降。
- 最小储存单元:InnoDB存储引擎最小储存单元就是页(Page),页可以用于存放数据也可以用于存放键值+指针,一个页的大小默认是16K。也就是说InnoDB中不管你的数量量是多少,最终占用的存储空间肯定是16K的整数倍。
- InnoDB索引结构:为什么在关心索引结构呢,因为在千万级的数据查询中如果没有索引,根本就没法查询,索引的数据结构直接影响我们的查询效率。InnoDB的索引结构是B+树,B+树的特点是叶子节点存放数据,非叶子结点存放键值+指针。[这里我就不再分析MYSQL的索引原理了,感兴趣的同学可以看我的另一篇关于MYSQL索

MySQL单表超过2000万行时,性能显著下降,这源于InnoDB引擎的页存储和B+树索引结构。B+树高度增加导致查询时IO次数增多,影响性能。1000万和100万数据量的主键索引性能相当,皆为2次IO。
最低0.47元/天 解锁文章
1094

被折叠的 条评论
为什么被折叠?



