当前位置:网站首页>MYSQL一种分表实现方案及InnoDB、MyISAM、MRG_MYISAM等各种引擎应用场景介绍
MYSQL一种分表实现方案及InnoDB、MyISAM、MRG_MYISAM等各种引擎应用场景介绍
2022-04-23 14:07:00 【pureluckyfish】
一、MYSQL实现分表完整示例(5.7版本)
1、建三张一样的分表user1、user2、user3
CREATE TABLE user1 (
id INT auto_increment NOT NULL,
name varchar(50) NULL,
sex INT DEFAULT 0 NOT NULL,
CONSTRAINT user1_pk PRIMARY KEY (id)
)ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
CREATE TABLE user2 (
id INT auto_increment NOT NULL,
name varchar(50) NULL,
sex INT DEFAULT 0 NOT NULL,
CONSTRAINT user1_pk PRIMARY KEY (id)
)ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
CREATE TABLE user3 (
id INT auto_increment NOT NULL,
name varchar(50) NULL,
sex INT DEFAULT 0 NOT NULL,
CONSTRAINT user1_pk PRIMARY KEY (id)
)ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
2、另建一张主表,表结构一样但引擎ENGINE=MRG_MyISAM;增删改查都是操作这张表,但是真实的数据变化是在各个分表中
CREATE TABLE alluser (
id INT auto_increment NOT NULL,
name varchar(50) NULL,
sex INT DEFAULT 0 NOT null,
index(id)
)
ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8
INSERT_METHOD=LAST UNION=(`user1`,`user2`,`user3`)
auto_increment=1 COMMENT='一种分表实现方法';
3、验证:执行insert语句,查询发现数据存储在user3中(为啥数据是存在user3中而不是user1呢?往下看)
insert into alluser(name,sex)values('童童',1);
select * from alluser;
delete from alluser where id=1;
select * from user1 ;
select * from user2 ;
select * from user3 ;
文章引用:https://www.cnblogs.com/lucky-man/p/6207873.html 假如我有一张用户表user有1100W条数据,现在要拆成三张表user1和user2和user3,user1表存500w,user2存500w,user3存100w,以后新增的用户信息都存在user3中。 |
INSERT INTO user1(user1.id,user1.name,user1.sex)SELECT (user.id,user.name,user.sex)FROM user where user.id <= 5000000;
INSERT INTO user2(user2.id,user2.name,user2.sex)SELECT (user.id,user.name,user.sex)FROM user where user.id > 5000000 and user.id <= 10000000;
INSERT INTO user3(user3.id,user3.name,user3.sex)SELECT (user.id,user.name,user.sex)FROM user where user.id > 10000000;
这样我就成功的将一张user表,分成了三个表,这个时候有一个问题,代码中的sql语句怎么办,以前是一张表,现在变成三张表了,代码改动很大,这样给程序员带来了很大的工作量,有没有好的办法解决这一点呢?办法是把以前的user表备份一下,然后删除掉,上面的操作中我建立了一个alluser表,只把这个alluser表的表名改成user就行了 |
二、INSERT_METHOD三种方式区别
INSERT_METHOD=FIRST | 插入到第一个表 |
INSERT_METHOD=LAST | 插入到最后一个表 |
INSERT_METHOD=NO或者缺省 | 不能执行insert操作 |
三、MYSQL各种引擎简单说明
show engines;--查询所有引擎
![]() |
英文说明 | 引擎适用场景 | 建表语句 | 数据存储文件 |
InnoDB | 5.5版本后Mysql的默认数据库,事务型数据库的首选引擎,支持ACID事务,支持行级锁定 | ENGINE=InnoDB | .frm .ibd |
MyISAM | 拥有较高的插入,查询速度,但不支持事务 | ENGINE=MyISAM | .frm .MYD .MYI |
MRG_MYISAM | 将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用 | ENGINE=MRG_MYISAM | .frm .MRG |
MEMORY | 所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失 | ENGINE=MEMORY | .frm |
ARCHIVE | 非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度,但其对查询的支持相对较差 | ENGINE=ARCHIVE | .frm .ARZ |
mysql数据存储路径
版权声明
本文为[pureluckyfish]所创,转载请带上原文链接,感谢
https://blog.csdn.net/sinat_33918956/article/details/118415724
边栏推荐
- mysql 5.1升级到5.610
- Prediction of tomorrow's trading limit of Low Frequency Quantization
- Can global variables be defined in header files
- 容灾有疑问?点这里
- 预览CSV文件
- POI operation word template replaces data and exports word
- About the configuration and use of json5 in nodejs
- DDT+Excel进行接口测试
- 困扰多年的系统调研问题有自动化采集工具了,还是开源免费的
- Storage path of mod subscribed by starbound Creative Workshop at Star boundary
猜你喜欢
01-NIO基础之ByteBuffer和FileChannel
Jira截取全图
Operation instructions of star boundary automatic text translator (advanced version)
Research on recyclerview details - Discussion and repair of recyclerview click dislocation
政务云迁移实践 北明数科使用HyperMotion云迁移产品为某政府单位实施上云迁移项目,15天内完成近百套主机迁移
VMWare安装64位XP中文教程
基于ibeacons签到系统
Promtail + Loki + Grafana 日志监控系统搭建
RecyclerView高级使用(一)-侧滑删除的简单实现
回顾2021:如何帮助客户扫清上云最后一公里的障碍?
随机推荐
Postman的安装使用及填坑心得
多云数据流转?云上容灾?年前最后的价值内容分享
帆软中根据分类进行汇总
帆软实现分页时第一行和最后两行冻结方式
在MAC上安装mysql
Mock测试
redis数据库讲解(四)主从复制、哨兵、Cluster群集
redis数据库讲解(三)redis数据类型
rsync+inotify远程同步
基于CM管理的CDH集群集成Phoenix
Prediction of tomorrow's trading limit of Low Frequency Quantization
使用Postman进行Mock测试
某政务云项目业务系统迁移调研实践
MySQL数据库讲解(十)
Installation and use of postman pit
Operation instructions of star boundary text automatic translator
RecyclerView高级使用(一)-侧滑删除的简单实现
Algorithem_ReverseLinkedList
查询2013年到2021年的数据,只查询到2020的数据,遇到了这个问题所进行的解决办法
Mysql个人学习总结