Mysql水平分表-merge

一:介绍:

merge是Mysql最简单的一种分表,Mysql自带的一个分表功能,Merge表并不保存数据,Merge表和分表是对应映射关系。

优点:

使用简单,不用修改程序代码,最多我们修改一下Merage表名就可以兼容以前程序

缺点:

a:只能使用MyISAM引擎

b:很难平均分配,比如Merage设置插入条件,要么只能插入到第一个表,要么插入到最后一个表。

c:没有约束ID,比如现在是在第一个表插入,后面我改成在第二个表插入,那么ID在Merage表中就会重复,ID不唯一,就会造成很多程序异常。解决这个问题,需要统一规则,不能一会儿在前面插入,一会儿在后面插入,也不能直接在分表插入,分表插入不是不可以,如果统一了全局ID,可以在分表插入。

综合适应场景:

merge分表非常适合开始没做好规划,后来数据量上来,要拆分表的情况;比如接手一个项目,上一路人马把几千万条数据弄在一个表里面,拆表很可能就要改sql,此时你心里肯定一千个草泥马,用merge分表这种方式不需要改代码即可轻松实现。

三:思路:

创建大表 大表添加数据

复制大表,就是分表2个

建立分表管理表

进行插入数据测试

四:分表的管理表

CREATE TABLE `tall` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `sex` int(1) NOT NULL,
  KEY `id` (`id`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=LAST UNION=(`t1`,`t2`);

备注:

tall:Merge表名;

INSERT_METHOD:表示插入方式;

INSERT_METHOD=LAST 添加数据的时候插入到最后一个表,这里就是t2

INSERT_METHOD=FIRST 添加数据的时候插入到第一个表,这里就是t1

INSERT_METHOD=0 不允许插入

UNION = (t1,t2) 关联t1和t2表 

Merge表 数据结构必须和分表完全一致

上面蓝色部分ENGINE必须是MRG_MyISAM或者MERGE,这两个是一个意思。

四:方法SQL

-- 创建大表-- 
CREATE TABLE `t` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `sex` int(1) NOT NULL,
  KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

-- 创建分表-- 
create table t1 like t;
create table t2 like t;

-- 分表获取大表数据-- 
insert into t1 select * from t where id%2=0;
insert into t2 select * from t where id%2=1;

-- 分表管理表-- 
drop table if exists tall;

CREATE TABLE `tall` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `sex` int(1) NOT NULL,
  KEY `id` (`id`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=FIRST UNION=(`t1`,`t2`);

-- 测试数据-- -- 
insert into tall (name,sex) values ("a",1);
insert into tall (name,sex) values ("a",1);
insert into tall (name,sex) values ("a",1);
insert into tall (name,sex) values ("a",1);

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值