黑马程序员技术交流社区

标题: Mysql常见水平分表方案 [打印本页]

作者: 小江哥    时间: 2018-11-13 16:19
标题: Mysql常见水平分表方案
本帖最后由 小江哥 于 2018-11-13 16:21 编辑

根据经验,Mysql表数据一般达到百万级别,查询效率会很低,容易造成表锁,甚至堆积很多连接,直接挂掉;水平分表能够很大程度较少这些压力。

1.按时间分表
这种分表方式有一定的局限性,当数据有较强的实效性,如微博发送记录、微信消息记录等,这种数据很少有用户会查询几个月前的数据,如就可以按月分表。
2.按区间范围分表
一般在有严格的自增id需求上,如按照user_id水平分表:
table_1  user_id从1~100w
table_2  user_id从101~200w
table_3  user_id从201~300w
...
3.hash分表
通过一个原始目标的ID或者名称通过一定的hash算法计算出数据存储表的表名,然后访问相应的表。
按如下分10张表:

另外,介绍我现在就是采用简单的取模分表:

4.利用merge存储引擎分表
感觉merge存储引擎类似sql中union的感觉,但是查询效率不高。
如下举例,拥有1000w记录的old_user表分表:
(1)创建new_user表使用merge存储引擎

(2)我old_user数据进行分表:
这种方案最大的好处是,几乎不用动业务代码。
                推荐阅读








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2