标准答案
- 分区适合按时间或明确范围管理冷热数据、快速归档和删除,并要求查询条件能够命中分区键。
- 分库分表适合单机的存储、写入、索引或连接能力已成为真实瓶颈,且业务可以按稳定键拆分。
- 拆分前先优化索引、SQL、归档、读写模型、缓存和垂直拆表,很多问题不需要立即水平拆分。
- 一旦分片,跨分片 JOIN、全局唯一性、分页排序、聚合、事务和迁移都需要额外设计。
- 应从数据增长、热点分布、故障域、团队运维能力和未来扩容路径综合判断,而不是只以表行数为阈值。
题目解析
分区不是自动分片。若查询没有带分区键,数据库仍可能扫描许多分区;若单个实例的 CPU 或写入已饱和,分区也不能像多节点那样横向扩展。
过早拆分会把原本数据库可保证的问题移到应用层。例如跨分片订单查询、全局报表、补数据和发布都变得复杂,且这些成本会长期存在。
常见误区
- 把分区当作无条件性能优化,查询却没有任何分区裁剪条件。
- 仅因表达到某个行数就分库分表,不分析数据大小、索引、访问模式和单机指标。