前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Merge存储引擎实现MySQL分表

使用Merge存储引擎实现MySQL分表

作者头像
友儿
发布2022-09-09 17:13:08
1.1K0
发布2022-09-09 17:13:08
举报
文章被收录于专栏:友儿

使用Merge存储引擎实现MySQL分表 一、使用场景   Merge表有点类似于视图。使用Merge存储引擎实现MySQL分表,这种方法比较适合那些没有事先考虑分表,随着数据的增多,已经出现了数据查询慢的情况。

这个时候如果要把已有的大数据量表分开比较痛苦,最痛苦的事就是改代码。所以使用Merge存储引擎实现MySQL分表可以避免改代码。

  Merge引擎下每一张表只有一个MRG文件。MRG里面存放着分表的关系,以及插入数据的方式。它就像是一个外壳,或者是连接池,数据存放在分表里面。

对于增删改查,直接操作总表即可。

二、建表   1.用户1表

代码语言:javascript
复制
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表

代码语言:javascript
复制
  create table user2 like user1;

  3.主表

代码语言:javascript
复制
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中的数据。

代码语言:javascript
复制
   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中的数据。

代码语言:javascript
复制
 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):   

代码语言:javascript
复制
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表中分别增加一条数据,

代码语言:javascript
复制
    insert into user1(name,sex) values('王五',1);

    insert into user2(name,sex) values('赵六',2);

  3.查询user1和user2中的数据:

4.查询总表alluser中的数据,发现id没有重复的

搞定。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档