Mysql水平分表-merge
一:介绍:
merge是Mysql最简单的一种分表,Mysql自带的一个分表功能,Merge表并不保存数据,Merge表和分表是对应映射关系。
优点:
使用简单,不用修改程序代码,最多我们修改一下Merage表名就可以兼容以前程序
缺点:
a:只能使用MyISAM引擎
b:很难平均分配,比如Merage设置插入条件,要么只能插入到第一个表,要么插入到最后一个表。
c:没有约束ID,比如现在是在第一个表插入,后面我改成在第二个表插入,那么ID在Merage表中就会重复,ID不唯一,就会造成很多程序异常。解决这个问题,需要统一规则,不能一会儿在前面插入,一会儿在后面插入,也不能直接在分表插入,分表插入不是不可以,如果统一了全局ID,可以在分表插入。
综合适应场景:
merge分表非常适合开始没做好规划,后来数据量上来,要拆分表的情况;比如接手一个项目,上一路人马把几千万条数据弄在一个表里面,拆表很可能就要改sql,此时你心里肯定一千个草泥马,用merge分表这种方式不需要改代码即可轻松实现。
三:思路:
创建大表 大表添加数据
复制大表,就是分表2个
建立分表管理表
进行插入数据测试
四:分表的管理表
CREATE TABLE `tall` (`id` int(8) NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL,`sex` int(1) NOT NULL,KEY `id` (`id`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=LAST UNION=(`t1`,`t2`);备注:tall:Merge表名;INSERT_METHOD:表示插入方式;INSERT_METHOD=LAST 添加数据的时候插入到最后一个表,这里就是t2INSERT_METHOD=FIRST 添加数据的时候插入到第一个表,这里就是t1INSERT_METHOD=0 不允许插入UNION = (t1,t2) 关联t1和t2表 Merge表 数据结构必须和分表完全一致上面蓝色部分ENGINE必须是MRG_MyISAM或者MERGE,这两个是一个意思。
四:方法SQL
-- 创建大表--
CREATE TABLE `t` (`id` int(8) NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL,`sex` int(1) NOT NULL,KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;-- 创建分表--
create table t1 like t;
create table t2 like t;-- 分表获取大表数据--
insert into t1 select * from t where id%2=0;
insert into t2 select * from t where id%2=1;-- 分表管理表--
drop table if exists tall;CREATE TABLE `tall` (`id` int(8) NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL,`sex` int(1) NOT NULL,KEY `id` (`id`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=FIRST UNION=(`t1`,`t2`);-- 测试数据-- --
insert into tall (name,sex) values ("a",1);
insert into tall (name,sex) values ("a",1);
insert into tall (name,sex) values ("a",1);
insert into tall (name,sex) values ("a",1);
Mysql水平分表-merge相关推荐
- Mysql水平分表-后端代码
思路 依据入参进行选择表 把参数写入到sql语句中,即可选择保存至那个表或者查询那个表 SQL CREATE TABLE `msg_0` (`id` int(11) NOT NULL AUTO_INC ...
- mysql 水平分表
新建10张表,user_0,user_1,...user_9,方法不可串用,采用hash或取余法,获取要操作的表名,取值用对应存值的方法 1.hash取余法 public function part_ ...
- MYSQL实现水平分表
mysql水平分表 本人主要以Navicat实现,具体想要高端点,可以用Sharing JDBC.Mycat去实现 水平分表 mysql水平分表 分库分表原理是什么? 为什么要分库分表? 二.水平分表 ...
- mysql使用MRG_MyISAM(MERGE)实现水平分表
来源:http://m.oschina.net/blog/382658 在MySql中数据的优化尤其是大数据量的优化是一门很大的学问,当然其它数据库也是如此,即使你不是DBA,做为一名程序员掌握一些基 ...
- Mysql 数据库水平分表 存储过程
数据库存储量达到一定程度的时候,就需要进行分表以减轻检索的消耗. 常用的分表方式包括水平和垂直分表.本次进行的是按照uid进行水平分表. ##分表思路: 水平分表平均的将数据按照特定方式分配到多个表中 ...
- TDSQL MySQL版基本原理-水平分表 读写分离 弹性扩展 强同步
TDSQL MySQL版(TDSQL for MySQL)是部署在腾讯云上的一种支持自动水平拆分.Shared Nothing 架构的分布式数据库.TDSQL MySQL版 即业务获取的是完整的逻辑库 ...
- mysql 垂直分表 设计_水平分表和垂直分表
一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数据库连接少甚至无连接可用.接下来就 ...
- 2、ShardingSphere 之 Sharding-JDBC实现水平分表
文章目录 1 Sharding-JDBC简介 2 Sharding-JDBC 3 Sharding-JDBC实现水平分表 3.1 搭建环境 3.1.1 总体概览 3.1.2 创建SpringBoot工 ...
- ShardingSphere(二) 水平分表配置搭建,实现分表写入读取
概述:本章内容分将搭建一个ShardingSphere工程环境,并实现最简单的单库下的水平分表配置演示.通过解读配置文件我们来了解ShardingSphere中是如何实现他的路由操作. 环境:Spri ...
最新文章
- Leetcode232.栈实现队列
- 创建型模式—原型模式
- python3(一)数字Number
- js 技巧杂引(转)
- 从前世今生聊一聊,大厂为啥亲睐时序数据库
- g6-editor 使用
- linux eclipse 调试程序,使用Eclipse对FFmpeg进行调试
- C++ main函数中参数argc和argv相关定义与研究
- 【网络/通信】概念的理解 —— 带宽、吞吐量、净荷
- laravel composer 安装指定版本以及基本的配置
- mysql linux 表名区分大小写吗_MySQL在linux下的表名如何不区分大小写
- IEC103通讯规约学习心得
- 【秋色动人xp情侣主题】
- python如何求偏导_求偏导数怎样做啊
- 【读点论文】ViTGAN: Training GANs with Vision Transformers 将视觉transformer和gan结合起来
- 读《天才在左,疯子在右》
- iOS app加密探究爱加密iOS app加密原理
- 微信小程序商城开发费用
- 山东理工ACM【1532】矩阵输出
- HP打印机无线网共享打印方法(型号P1007)