一:介绍:

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相关推荐

  1. Mysql水平分表-后端代码

    思路 依据入参进行选择表 把参数写入到sql语句中,即可选择保存至那个表或者查询那个表 SQL CREATE TABLE `msg_0` (`id` int(11) NOT NULL AUTO_INC ...

  2. mysql 水平分表

    新建10张表,user_0,user_1,...user_9,方法不可串用,采用hash或取余法,获取要操作的表名,取值用对应存值的方法 1.hash取余法 public function part_ ...

  3. MYSQL实现水平分表

    mysql水平分表 本人主要以Navicat实现,具体想要高端点,可以用Sharing JDBC.Mycat去实现 水平分表 mysql水平分表 分库分表原理是什么? 为什么要分库分表? 二.水平分表 ...

  4. mysql使用MRG_MyISAM(MERGE)实现水平分表

    来源:http://m.oschina.net/blog/382658 在MySql中数据的优化尤其是大数据量的优化是一门很大的学问,当然其它数据库也是如此,即使你不是DBA,做为一名程序员掌握一些基 ...

  5. Mysql 数据库水平分表 存储过程

    数据库存储量达到一定程度的时候,就需要进行分表以减轻检索的消耗. 常用的分表方式包括水平和垂直分表.本次进行的是按照uid进行水平分表. ##分表思路: 水平分表平均的将数据按照特定方式分配到多个表中 ...

  6. TDSQL MySQL版基本原理-水平分表 读写分离 弹性扩展 强同步

    TDSQL MySQL版(TDSQL for MySQL)是部署在腾讯云上的一种支持自动水平拆分.Shared Nothing 架构的分布式数据库.TDSQL MySQL版 即业务获取的是完整的逻辑库 ...

  7. mysql 垂直分表 设计_水平分表和垂直分表

    一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数据库连接少甚至无连接可用.接下来就 ...

  8. 2、ShardingSphere 之 Sharding-JDBC实现水平分表

    文章目录 1 Sharding-JDBC简介 2 Sharding-JDBC 3 Sharding-JDBC实现水平分表 3.1 搭建环境 3.1.1 总体概览 3.1.2 创建SpringBoot工 ...

  9. ShardingSphere(二) 水平分表配置搭建,实现分表写入读取

    概述:本章内容分将搭建一个ShardingSphere工程环境,并实现最简单的单库下的水平分表配置演示.通过解读配置文件我们来了解ShardingSphere中是如何实现他的路由操作. 环境:Spri ...

最新文章

  1. Leetcode232.栈实现队列
  2. 创建型模式—原型模式
  3. python3(一)数字Number
  4. js 技巧杂引(转)
  5. 从前世今生聊一聊,大厂为啥亲睐时序数据库
  6. g6-editor 使用
  7. linux eclipse 调试程序,使用Eclipse对FFmpeg进行调试
  8. C++ main函数中参数argc和argv相关定义与研究
  9. 【网络/通信】概念的理解 —— 带宽、吞吐量、净荷
  10. laravel composer 安装指定版本以及基本的配置
  11. mysql linux 表名区分大小写吗_MySQL在linux下的表名如何不区分大小写
  12. IEC103通讯规约学习心得
  13. 【秋色动人xp情侣主题】
  14. python如何求偏导_求偏导数怎样做啊
  15. 【读点论文】ViTGAN: Training GANs with Vision Transformers 将视觉transformer和gan结合起来
  16. 读《天才在左,疯子在右》
  17. iOS app加密探究爱加密iOS app加密原理
  18. 微信小程序商城开发费用
  19. 山东理工ACM【1532】矩阵输出
  20. HP打印机无线网共享打印方法(型号P1007)

热门文章

  1. Java操作SQL Server数据库
  2. Mysql数据目录初识
  3. Python多继承基础
  4. 回文数python_回文数 python
  5. 只安装python_pip 只能安装python库吗
  6. 链表反转2(Reverse Linked List II)
  7. 洛谷P4114 Qtree1(树链剖分+线段树)
  8. 基于ffmpeg和libvlc的视频剪辑、播放器
  9. 生成器表达式 内置函数
  10. python使用snappy压缩