一、垂直拆分
定义:对数据表“列”进行拆分,把一张列比较多的表拆分为多张表
分表原则:
- 常用字段放在同一张表中
- text等大字段独立拆分为一张表
查询方案:
- 使用Join进行连接即可
二、水平拆分
定义:当表行数特别大(一般而言,指千万级以上)时,分成小表
分表原则:
- 可按照对ID取模%N的方式(或hexdec(MD5(某字符串))%N),使ID分散到N个表中
- 根据业务逻辑,可选择通过日期、地区等分表
- 按照行数分表,如1~50,51~100(对查询没办法优化)
典型缺点:
- group by或order by 会发生大灾难
查询方案:
- 使用union和union all进行连接
分页查询方案:
select * from ( select * from [Member A] union all select * from [Member B]) TmpTable limit 0,20 #此处 TmpTable是一个正常表
参考资料:
http://www.dewen.net.cn/q/17048/mysql+%E6%8C%89%E6%97%A5%E6%9C%9F%E6%B0%B4%E5%B9%B3%E5%88%86%E8%A1%A8%E4%B9%8B%E5%90%8E%E7%9A%84%E6%95%B0%E6%8D%AE%E6%9F%A5%E8%AF%A2%E6%96%B9%E5%BC%8F%E4%BB%A5%E5%8F%8A%E5%88%86%E9%A1%B5%E7%AD%96%E7%95%A5
http://www.cnblogs.com/zzwlovegfj/archive/2012/06/23/2559592.html
http://www.cnblogs.com/zhongyuan/p/4385747.html