分表原则:避免跨表操作,让业务的操作尽可能在一个表中完成,如果要跨表,只能说明分法不合理,如果真的有些业务场景要跨表,可以做副本冗余。
垂直分表:
一般就是将主键+常用字段列 放在一张表,主键+不常用列 放在另外一张表。
根绝自己业务需求,区分常用字段和不常用字段来分表。尽量避免join和union查询,如果这样的操作很多,说明分法不合理。
水平分表:
常见的几种水平分表法:
- 按时间分:新闻类,朋友圈动态,微博最新动态等关注实时的,可以按月份划分,一个月一张表。
- 按区间分:每个表的自增id,按id的区间来划分,如1~1000一张表,1001~2000一张表。涉及到删除数据,一般删除数据做状态修改,只是物理删除。
- 按hash值分:表的唯一值如用户id ,对用户id取模,然后MD5处理用户id,截取多少位做字段存储唯一值。