使用Merge存储引擎实现MySQL分表
一、使用场景
Merge表有点类似于视图。使用Merge存储引擎实现MySQL分表,这种方法比较适合那些没有事先考虑分表,随着数据的增多,已经出现了数据查询慢的情况。
这个时候如果要把已有的大数据量表分开比较痛苦,最痛苦的事就是改代码。所以使用Merge存储引擎实现MySQL分表可以避免改代码。
Merge引擎下每一张表只有一个MRG文件。MRG里面存放着分表的关系,以及插入数据的方式。它就像是一个外壳,或者是连接池,数据存放在分表里面。
对于增删改查,直接操作总表即可。
二、建表
1.用户1表
CREATE TABLE `user1` (
`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;
2.用户2表
create table user2 like user1;
3.主表
CREATE TABLE `alluser` (
`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=LAST UNION=(`user1`,`user2`);
1) ENGINE = MERGE 和 ENGINE = MRG_MyISAM是一样的意思,都是代表使用的存储引擎是 Merge。
2) INSERT_METHOD,表示插入方式,取值可以是:0 和 1,0代表不允许插入,1代表可以插入;
3) FIRST插入到UNION中的第一个表,LAST插入到UNION中的最后一个表。
三、操作
1. 先在user1表中增加一条数据,然后再在user2表中增加一条数据,查看 alluser中的数据。
insert into user1(name,sex) values ('张三',1);
insert into user2(name,sex) values ('李四',2);
select * from alluser; 发现是刚刚插入的数据如下:
这就出现了一个id重复,这就造成了当删除和修改的时候异常,解决办法是给 alluser的id赋唯一值。
我们解决方法是,重新建立一张表tb_ids(id int),用来专门存一个id的,并插入一条初始数据,同时删除掉user1和user2中的数据。
create table tb_ids(id int);
insert into tb_ids values(1);
delete from user1;
delete from user2;
然后在user1和user2表中建立一个触发器,触发器的功能是 当在user1或者user2表中增加一条记录时,取出tb_ids中的id值,赋给user1和user2的id,然后将tb_ids的id值加1,
触发器内容如下(将user1改为user2):
DELIMITER $$
CREATE TRIGGER tr_seq
BEFORE INSERT on user1
FOR EACH ROW BEGIN
select id into @testid from tb_ids limit 1;
update tb_ids set id = @testid + 1;
set new.id = @testid;
END$$
DELIMITER;
2.在user1和user2表中分别增加一条数据,
insert into user1(name,sex) values('王五',1);
insert into user2(name,sex) values('赵六',2);
3.查询user1和user2中的数据:
4.查询总表alluser中的数据,发现id没有重复的:
搞定。
最新文章
- 程序员眼中的 SQL Server-执行计划教会我如何创建索引?
- hadoop搭建初步总结
- 探索javascript----获得节点计算后样式
- XML的验证模式
- 【转】ButterKnife基本使用--不错
- PHP获取毫秒时间戳
- 用Verilog实现IIC通讯
- POJ 2112 Optimal Milking【网络流+二分+最短路】
- CLR的组成和运转
- CSS3特性修改(自定义)浏览器默认滚动条
- RuntimeError: module compiled against API version 0xa but this version of numpy is 0x9
- Python3中的模块
- MySQL 索引管理与执行计划
- Ubuntu16.04 IDE: 用Vim逐步打造一个IDE
- idea 打开自动编译以及查看Problem窗口
- Linux内存管理 (4)分配物理页面
- 设计简单的VB程序
- Java8的Stream语法详解(转载)
- CH0101 a^b、 CH0102 64位整数乘法(快速幂、快速乘)【模板题】
- 【Jmeter】插件
热门文章
- 高维数据降维 国家自然科学基金项目 2009-2013 NSFC Dimensionality Reduction
- MongoDB - MongoDB CRUD Operations, Bulk Write Operations
- Ubuntu下快速部署安装 Nginx + PHP + MySQL 笔记
- HDU 4548 美素数 在线打表加数状数组
- jQuery基础之二(操作标签)
- JS设计模式——12.装饰者模式
- Max Sum Plus Plus (动态规划) HDU1024
- weight decay(权值衰减)、momentum(冲量)和normalization
- 理解mipi协议【转】
- 实现checkebox全选取消操作