分表原则:避免跨表操作,让业务的操作尽可能在一个表中完成,如果要跨表,只能说明分法不合理,如果真的有些业务场景要跨表,可以做副本冗余。

垂直分表:

一般就是将主键+常用字段列 放在一张表,主键+不常用列 放在另外一张表。

根绝自己业务需求,区分常用字段和不常用字段来分表。尽量避免join和union查询,如果这样的操作很多,说明分法不合理。

水平分表:

常见的几种水平分表法:

  • 按时间分:新闻类,朋友圈动态,微博最新动态等关注实时的,可以按月份划分,一个月一张表。
  • 按区间分:每个表的自增id,按id的区间来划分,如1~1000一张表,1001~2000一张表。涉及到删除数据,一般删除数据做状态修改,只是物理删除。
  • 按hash值分:表的唯一值如用户id ,对用户id取模,然后MD5处理用户id,截取多少位做字段存储唯一值。