MySQL 单表不要超过 2000 万行
MySQL 单表行数建议不超过 2000 万行(2000w),因为超过后 B+Tree 索引高度会增加,导致查询磁盘IO增多、性能下降,并增加内存/磁盘空间消耗,但这不是绝对限制,可根据硬件和业务优化。
- B+Tree 高度增加: 约2000万行数据,索引 B+Tree 通常是3层,能较好地在内存中加载,超过此值会增加树层级(4层以上),带来更多磁盘I/O。
- 查询性能下降: 树高增加意味着需要更多磁盘I/O和索引维护成本,查询速度变慢。
- 内存/磁盘压力: 大量数据和索引会占用更多内存(InnoDB Buffer Pool)和磁盘空间。
- 这个值是基于 OLTP(联机事务处理)场景和常见硬件(如普通SSD)的经验值。
- 如果硬件性能强劲、索引设计合理、查询模式简单,单表支持更大行数(如MySQL 5.7+ InnoDB支持2000亿行,但性能会受影响)也是可能的。
- 超过2000万时,需要考虑分库分表、合理索引、硬件升级或参数调优等策略。