mysql使用MRG_MyISAM(MERGE)实现水平分表

mysql使用MRG_MyISAM(MERGE)实现水平分表

现在因为业务需要,有一张1100多万的数据需要分表。

考虑用MRG_MyISAM实现水平分表,定制一套规则确定需要分割多少张表。



实现如下:

1.创建3张子表,ENGINE指定为MyISAM(子表)。


CREATE TABLE `customer1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `sex` int(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

    create table customer2 like customer1;

  create  table customer3 like customer1;

2.创建主表,ENGINE指定为MRG_MyISAM( INSERT_METHOD设置为NO 只读)

CREATE TABLE `customer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `sex` int(1) NOT NULL DEFAULT '0',
  KEY `id` (`id`)
) ENGINE=MRG_MyISAM DEFAULT 
CHARSET=utf8 INSERT_METHOD=NO UNION=(`customer1`,`customer2`,`customer3`);

INSERT_METHOD属性说明:

  1. 0 /no不允许插入(最好用NO)
  2. FIRST 插入到UNION中的第一个表
  3. LAST 插入到UNION中的最后一个表


3.插入数据

INSERT INTO customer1(`id`, `name`, `sex`) VALUES ('2', '33', '0');
INSERT INTO customer2(`id`, `name`, `sex`) VALUES ('111', '111', '0');
INSERT INTO customer3(`id`, `name`, `sex`) VALUES ('222', '222', '0');

4.测试插入主表

INSERT INTO customer(`id`, `name`, `sex`) VALUES ('6666', '6666', '0');

如图插入失败,测试设置成功

SELECT * FROM customer



查询数据,测试成功

5.注意事项,子表之间的主键可以相同,根据业务可以生成ID来保证数据主键的不重复,或者业务不复杂的情况下,可以建立只有一个属性的表,自增来生成唯一主键。至于插入表的话可以自定义配置表,根据业务来判断插入到那一张表

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值