架构 · 高频 4/5
如何从 B+ 树角度理解单表 2000 万后考虑分表?
单表数据量增加会带来索引树膨胀、页分裂、缓存命中下降和维护成本上升,但是否分表要结合行大小、访问模式和性能指标判断。
简短答案
单表数据量增加会带来索引树膨胀、页分裂、缓存命中下降和维护成本上升,但是否分表要结合行大小、访问模式和性能指标判断。
详细解析
2000 万不是绝对阈值。真正要看单行大小、索引数量、热数据比例、查询模式和机器配置。数据变大后,索引层级可能增加,Buffer Pool 命中率下降,写入维护多个索引的成本上升。
面试回答模板
我不会把 2000 万当固定规则,而是解释它背后的成本变化:索引体积变大、缓存命中下降、范围扫描变慢、DDL 和备份成本上升。是否分表要用慢 SQL、容量增长和业务查询模式一起判断。
易错点
- 只背结论,不解释原理和边界。
- 忽略真实生产环境中的容量、延迟、一致性和失败重试。
- 没有结合项目经验说明为什么这样设计。
常见追问
- 这个方案在高并发下有什么风险?
- 如果数据规模扩大十倍,你会如何调整?
- 线上出现异常时,你会先看哪些指标?