在关系数据库中,“分表”通常是指把原本一张大表拆分成多张结构类似的小表,以提升性能、可维护性或突破单表容量/并发瓶颈。下面从为什么分、怎么分、常见策略、实施要点几个角度系统说明。
常见原因:
按行拆分:表结构相同,数据按某种规则分散到多张表。
示例:
order_0
order_1
order_2
...
常见分片键(Sharding Key):
✅ 适合:数据量大、写多、查询可带分片键
按列拆分:把频繁访问列和冷数据列分开。
示例:
user_base (id, name, phone)
user_ext (id, bio, avatar, settings)
✅ 适合:
按时间或访问频率拆分:
✅ 适合:日志、订单、消息类系统
不同业务使用不同表,即使结构类似:
table = "order_" + (user_id % 16)
优点:分布均匀
缺点:扩容麻烦(改模数要迁移数据)
order_202301
order_202302
优点:易扩容、易归档
缺点:可能热点集中(新表压力大)
对分片键做 hash,再取模,比直接取模更均匀。
适合动态扩容,减少数据迁移。
✅ 解决:
不能用自增 ID 直接做全局主键。
✅ 方案:
跨表/跨库事务难保证。
✅ 方案:
如果你有具体场景(比如 MySQL 订单表、用户表、日志表),我可以给你直接可用的分表方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。