MySQL 分库分表学习笔记:从单库到分片的完整思路

最近在学习分库分表的方案,整理一下理解。

为什么需要分库分表

当一个表的数据量超过千万级别时,单库的性能会遇到瓶颈。虽然索引能帮助查询,但 B+Tree 层级变深,buffer pool 也装不下那么多数据。

分片键怎么选

这是最关键的一步。常见的选择: - 用户 ID:同一用户的数据在同一分片,用户维度查询快 - 订单 ID:按订单号分散,但用户查自己所有订单时需要跨分片 - 时间:按月份或年份分,适合日志类数据

常见方案

用 ShardingSphere 或者自己实现路由逻辑:

  1. 先规划好分几个库、每个库几张表
  2. 确定分片算法(取模、哈希、范围)
  3. 数据迁移时做双写 + 灰度切换
  4. 尽量避免跨分片查询,如果需要可以用 ES 做索引

分库分表不是银弹,能不分就不分。但随着数据增长,迟早要面对。

关于 Zihao Zhang

后端开发工程师。关注 Java/Spring Boot/Redis/MySQL 技术栈,分布式系统,OLAP 数据库,AI Agent 开发与应用。

评论

评论已关闭。