使用Merge存储引擎实现MySQL分表
使用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没有重复的
搞定。
相关文章
- MySQL存储引擎
- MySQL安装版如何使用(mysql安装版怎么用)
- MySQL学习之旅:从入门到精通(mysql学什么)
- 更新MySQL:从旧版本到新版本(更换mysql版本)
- MySQL存储过程:实现更高效率(mysql支持存储过程)
- 使用MySQL查询特定日期数据的方法(mysql查找某一天)
- 深入学习计算机二级数据库MySQL:解密其运作机制和数据管理核心(计算机二级数据库mysql)
- MySQL分布式存储:实现高性能存储(mysql分布式存储实现)
- 使用Python连接MySQL数据库,实现高效数据交互(python连接mysql)
- 如何快速查询MySQL数据库(查询mysql的数据库)
- MySQL 实现文件存储与路径访问(mysql 存储 路径)
- :MySQL:驱动数据库业务发展的“引擎”(mysql 题目)
- MySQL数据库的历史:从创建到现在(mysql 创建时间)
- MySQL存储过程中的IF:编写必要的体系结构(mysql存储过程if)
- blob在Mysql中的存储之旅(blob存到mysql)
- 善用Blob类型实现MySQL存储(blob和mysql)
- 用CMD命令查看MySQL版本号(cmd显示mysql版本)
- ABAP使用MySQL轻松连接简捷又安全(abap连接mysql)
- 解决cmd控制台缺失MySQL(cmd没有mysql)
- 掌握MySQL中占位符命令,让查询更加高效(mysql中占位符命令)
- MySQL分页简单实现,轻松掌握查询技巧(mysql 中分页)
- MySQL的三大循环语句forwhile和loop(mysql三大循环)
- 优化MySQL性能探讨不同表的分磁盘存储方法(mysql不同表分磁盘放)
- MySQL中的列子查询不被支持(mysql不支持列子查询)
- MYSQL浅谈MyISAM存储引擎