分表存储是把记录保存在不同的表表会一个关联了在这里我们来看一篇关于MySQL 分表存储的使用示例,具体的例子如下文介绍。

一般我们项目中如果数据量特别大的话通常会考虑将某一表数据进行分表处理,例如:我们的用户访问日志。如果将该数据始终保存在一张表的话那么久而久之这张表的数据量会特别大,导致查询效率降低。这个时候就需要考虑将该数据分别存储到多张表中。

而日志数据具有典型的如下特点:

1. 数据量大。

2. 每天每月都稳定输出。

3. 对数据的操作在插入之后大部分只有查询,很少有编辑或者删除操作。

MySQL数据库提供了数据分表的方式。

MERGE存储引擎

我们在使用SQL语句Create table创建表时可以指定数据表的存储引擎。当我们使用语句ENGINE=MEGRE或者ENGINE=MRG_MyISAM申明存储引擎时,即代表该数据表使用MERGE存储引擎存储数据。该数据表可以是其他特定ENGINE=MEGRE类型数据表的集合。不过这些所谓特定的数据表的表结构和索引必须完全一致(不过定义的顺序可以不同)。特别的表的AVG_ROW_LENGTH, MAX_ROWS,PACK_KEYS属性可以不同。

mysql> CREATE TABLE t1 (

->    a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

->    message CHAR(20)) ENGINE=MyISAM;

mysql> CREATE TABLE t2 (

->    a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

->    message CHAR(20)) ENGINE=MyISAM;

mysql> INSERT INTO t1 (message) VALUES ('Testing'),('table'),('t1');

mysql> INSERT INTO t2 (message) VALUES ('Testing'),('table'),('t2');

mysql> CREATE TABLE total (

->    a INT NOT NULL AUTO_INCREMENT,

->    message CHAR(20), INDEX(a))

->    ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;

上述代码是官方文档中给出的示例代码。其创建了两个分表:t1和t2,一个总表total。分别给t1和t2中插入数据,然后在total表中查询,可以发现在total表中可以查询到分别插入t1和t2的数据。

我们可以在total表中使用哦SELECT,DELETE,UPDATE和INSERT操作,不过必须要拥有各分表的SELECT,DELETE 和UPDATE权限。

在创建MERGE表时,使用参数UNION对表进行整合,例如上面代码的UNION=(t1, t2)。也可以使用INSERT_METHOD参数来申明如果在MERGE表中插入数据,是将数据插入到第一张表还是最后一张表中,如果INSERT_METHOD=NO,那么MEGRE表中将不允许插入数据,只允许插入在各分表当中。

不过另外一个值得注意的地方是上述代码中我们在分区表中并没有定义索引,但是在total表中我们定义了INDEX(a)并且没有定义PRIMARY KEY。这是因为在总表中的数据并不能保证也不检查数据的唯一性,也就是在各分表中是允许存在完全相同的数据的。

编辑映射

如果我们在使用过程中新建了需要加入总表的分表,这时候通常有两种方式:

删掉总表重新创建

使用ALTER TABLE tbl_name UNION=(……)来重新标记需要映射的分表。

如果我们不小心写成UNION=()(括号中为空),会发现这张表将为空,并且插入不进去数据,因为实际上本身总表不存储数据,这样插入数据时MYSQL也就不知道讲数据插入到哪了。

一些规则

总表和分表的定义以及索引需要保证大部分的一致。MySQL不会在创建总表的时候去检查分表的设置有没有错误,只有在打开查询的时候才会进行判断有没有存在错误。这也导致我们有可能在创建分表的时候不存在错误,然后某天编辑了分表,从而导致主表无法使用的情况。所以我们的总表和分表必须满足下列规则

总表和分表的列数必须相同。

总表和分表的列顺序需要一致。

另外,总表和分表的列规则必须满足以下规则

列类型必须相同

列的长度必须相同

列的内容可以为NULL

分表的索引数量必须大于等于总表的索引数量。分表的索引数量可以大于总表,但不可以少于总表。

表索引的相关规则:

总表和分表的索引类型必须一致

总表和分表的符合索引部分必须一致

针对索引部分(index part)的额外检查

索引部分长度必须一致

索引部分类型必须一致

索引部分的语言设置必须一致

可以为空

如果我们的总表在使用过程中无法打开了或者无法使用,我们亦可以使用命令:CHECK TABLE来显示到底是哪一个分表出现了问题。

mysql分表存储_MySQL 分表存储的使用示例相关推荐

  1. mysql表分区占用存储_MySQL 分区分表应用场景分析和分区中可能遇到的坑点

    MySQL的分区和分表应用场景分析 在日常工作中当我们的某张表的数据量过大的时候,首当其冲的可能就是进行分区和分表,但是是如何分区或者分表都要结合一点的业务场景下进行分析,才会显著的提升性能,来聊一聊 ...

  2. mysql 分表原理_MYSQL 分表原理(转)

    简介: 引用MySQL官方文档中的一段话:MERGE存储引擎,也被认识为MRG_MyISAM引擎,是一个相同的可以被当作一个来用的MyISAM表的集合."相同"意味着所有表同样的列 ...

  3. mysql如何根据业务分表设计_mysql分表分库的应用场景和设计方式

    很多朋友在论坛和留言区域问mysql在什么情况下才需要进行分库分表,以及采用何种设计方式才是最优的选择,根据这些问题,小编为大家整理了关于MySQL分库分表的应用场景和最优的设计方式举例. 一. 分表 ...

  4. mysql表分区和表空间_mysql分表和分区的区别浅析

    一.什么是mysql分表和分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上 二.my ...

  5. mysql 分表规则获取表名_mysql分表和表分区详解

    为什么要分表和分区? 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能 ...

  6. php mysql分表分库_MySQL分表和分库方案(php版)

    1,主从复制,读写分离 对主库修改数据,查询使用从库.一主多从,来降低数据库读取压力. 2,分库分表 根据实体业务来分库,分表.如,根据数据的活跃性,根据用户uid等. 3,mysql 不同存储引擎区 ...

  7. mysql分表准则_Mysql分表准则_MySQL

    bitsCN.com Mysql分表准则 Mysql分表准则 在大量使用mysql时,数据量大.高访问时,为了提高性能需要分表处理,简介下mysql分表的标准,后续会继续补充 环境: 业务类型:OLT ...

  8. mysql分表技巧_MySQL分表操作的方法分析

    本节内容: mysql分表 一般来说,当数据库的数据超过了100w记录时就应该考虑分表或者分区了. 本文介绍下mysql分表的一些方法. 首先,需要想好到底分多少个表,前提当然是满足应用. 这里使用了 ...

  9. mysql分表 查询_mysql分表+查询

    mysql分表+查询 垂直分表: 其实没啥好讲,就是 主键+常用列 放在原表中,再讲 主键+一些不常用列 放在另外的表中. 这样一个数据页就可以存放更多数据. 但是缺点也明显,可能会增加join 或 ...

最新文章

  1. 2018.11.06-知识回顾
  2. linux下软件的安装[转]
  3. 反思不可佛系:刺激身体 刺激神经 目标反馈 定量奖惩 注重氛围
  4. P3293 [SCOI2016]美味 主席树 + 伪01trie
  5. python批量新建文件_python批量处理
  6. 删除单词后缀(信息学奥赛一本通-T1141)
  7. C++数据结构01--顺序线性表实现
  8. adb devices 找不到夜神模拟器解决方法
  9. 霸榜 GitHub 的程序员来了!
  10. mybatis基础,mybatis核心配置文件properties元素
  11. 响应头中content-type常用的类型有哪些?
  12. Python:学习笔记(一)
  13. 软件需求,概要设计,详细设计(文档)
  14. “无法访问 您可能没有权限使用网络资源”解决办法
  15. ESP32 系列之 ESP-IDF 官方构建方案
  16. java游戏主角用毛笔_Java FX版的毛笔效果
  17. 解决ios固定定位失效问题
  18. Hibernate基础之SessionFactory
  19. C#委托和事件的概念
  20. fastica去噪matlab_Matlab中FastICA工具箱使用说明.pdf

热门文章

  1. OneNote2007的另类体验像Google Earth一样浏览笔记
  2. 1-100中6的倍数有多少个
  3. 股票 MACD指标的买入形态图解
  4. 很多计算机资料高速下载,有目录(转)
  5. UI自动化:UI Automation
  6. 经典设计原则:单一职责原则(SRP)
  7. php.ini 优化 oa,OA办公系统常见问题解答
  8. sdl+ffmpeg视频播放器
  9. 【极简版GH60】【GH60剖析】【二】原理图的分析
  10. 为什么 Python 不支持函数重载?其他函数大部分都支持的?