mysql分表那些事儿

       从前不太喜欢发博客,觉得太繁杂,感觉平时的工作开发就已经够忙的了,所以很多时候心里想写,但是行动不允许。最近因为工作也还轻松,因此有时间来整理一下自己之前用到过的和了解的一些东西。今天来说说mysql分表的一些事儿,其实也没多大事儿,只不过总结一下自己的经验吧。

       我们知道当mysql表数据相当大的时候我们会选择分表,或者当我们预期数据表会很大的时候,会想一些办法来设计表。比如分表,分表包括横向分表和纵向分表,横向分表就是讲数据表的数据平行切割成两张表或多张表,那么纵向分表就是将数据表中一些比较大的或者不经常用的一些字段分割出去,比如会员表中的一些字段如个性签名、爱好这些,我们不经常用这些字段来搜索,那么把他们放在另外一张表中,既可以让我们的数据表字段变得清晰,又可以在查询时是查询速度变快,然后当数据量过大时就该考虑横向分表了。横向分表即是将数据分开放到别的表里,而新建的这张表的字段又和刚才那张表一致,大概有这么几种方法:

       1、id 分割法 ,包括两种分法。第一种是当 id 达到一个数量的时候新建分表然后将新增的数据添加到新增的分表中;第二种方法就是平常很多见的取模分法,建立一个触发器或函数在添加之前获取到 主键 id ,然后让 主键 对 表数 取余,例如 15 % 10 = 5 那么就将数据放在第 5 张表中。

       2、时间分割法,就是判断当前时间,按照年、月、日来分,不存在包含当前时间的表名则新建表,将数据添加到新表中。

       我所了解的普通常见的就这么两种,当然也有根据不同的需求来实现一些奇怪的分表,然而分表容易,这是这么写一两个函数去执行就可以,问题的关键在于查询,常见的会员表、订单表、商品表等都需要分表,分完表之后还需要去查询,当我们看到 union 这种方法能将所有表连接起来查询的时候如获珍宝,但仔细想想却有点太傻,你要是分两三张表的话,用这种方法就可以了,但是当我们的分表数量很大的时候怎么办,难道也去一张张的连起来,分表的意义就没有了,还不如不分呢,都知道分表之后几乎不能用索引,如果不分的话或许还可以利用索引来优化一下,但分表之后索引怎么用呢,no way !

       其实 mysql 有一种引擎是专门来解决所有分表问题的 ,那就是 mysql 的 MERGE 引擎 : MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询。构成一个MERGE数据表结构的各成员MyISAM数据表必须具有完全一样的结构。每一个成员数据表的数据列必须按照同样的顺序定义同样的名字和类型,索引也必须按照同样的顺序和同样的方式定义。

注意 :

1、分表表结构必须与主表完全一致,包括列名、顺序。UNION表必须同属一个DATABASE。
2、分表类型必须是MyISAM的,总表必须使用 MRG_MYISAM 存储引擎。
3、可以通过修改.mrg文件来修改主表,每个分表的名字占一行。注意:修改后要通过FLUSH TABLES刷新表缓存。
4、对分表的更改可以直接反映在主表上,但在使用总表时,尽量不要对分表进行改、删、查等操作。
5、INSERT_METHOD的取值可以是: 0 不允许插入 FIRST 插入到UNION中的第一个表 LAST 插入到UNION中的最后一个表。(4.0之后可用)
6、定义在它上面的约束没有任何作用,约束是由基本表控制的,例如两个分表中存在着同样的一个Key值,那么在MERGE表中会有两个一样的Key值。

MERGE分表的优点就是搜索效率快。

     好了,到这里我们的数据库分表已经介绍的差不多了,当然对于也可能有我没有想到的地方,欢迎大家在下方评论留言,我们可以一起讨论。

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值