分区表是mysql5.1之后的新特性,合并表已经存在很长时间了。这篇文章主要介绍这两个概念以及他们基本的操作。

一、合并表

合并表说实话是一种将要被淘汰的技术,但是掌握了合并表的概念再去看分区表就比较容易理解一点。

合并表其实就是合并了多个子表的逻辑表,子表使用了myisam存储引擎物理子表,合并表使用merge存储引擎,逻辑表和子表的结构完全相同(包括字段、索引等)。

删除一个合并表,它的子表不会受任何影响,而如果删除其中一个子表则可能会有不同的后果,这要视操作系统而定。

下面我们进行实操一下:创建量两张物理子表t1和t2,然后创建他们俩的合并表。

在上面我们进行了一些初始化操作。而且我们在创建合并表的时候,指定了insert_method为last,意思就是在最后一张物理表的末尾插入真实数据,这里最后一张真实物理表就是t2。此时我们插入一个数据5会发现:t1没有,t2有。

合并表的内容很简单,也很容易理解。既然表能合并肯定也能分开。我们接着看分区表:

二、分区表

分区表就是把一张表分开,对用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成。实现分区的代码实际上是对一组底层表的句柄对象的封装。对分区表的请求,都会通过句柄对象转化成对存储引擎的接口调用。分区表的每一个分区都是有索引的独立表。

分区表发挥大作用的场景:

(1)表非常大以至于无法全部都放在内存中,或者只在表的最后部分有热点数据,其他均是历史数据。

(2)分区表的数据更容易维护。

(3)分区表的数据可以分布在不同的物理设备上。

(4)可以使用分区表来避免某些特殊的瓶颈,例如InnoDB单个索引的互斥访问。

(5)如果需要,还可以备份和恢复独立的分区,这在非常大的数据集的场景下效果非常好。

分开的方式有三种:

(1)水平分区:根据行切分,也就是把记录分开。

(2)垂直分区:根据列切分,也就是把字段分开。

(3)复合分区:水平分区和垂直分区的结合。

我们按照这两种方式来实际操作一下:

1、水平分区

(1)range分区

range分区是基于连续的范围值。

在这里需要注意的是,alter形式删除分区比delete形式更加的高效。一般都是基于日期时间进行分区。

(2)List分区

range分区是基于连续的范围,list是基于确定值的范围,就好比集合。

这种不是指的范围,而是指的具体的值,10号和20在n1分区,30在n2分区。

(3)Hash分区

hash分区指的是根据hash运算的模,最终确定在哪一个分区。比如2020/4=0,就落在分区0上。

此时我们2020/4=0,就会保存在分区0中。

(4)线性Hash分区

线性hash指的是使用2的幂运算法则。运算起来比较麻烦。但是优点是可以使得数据分布均匀。举个例子。假设分区个数num=6,N表示数据最终存储的分区:

第一步:V = power(2, ceiling(log(2, num))),log是计算NUM以2为底的对数,ceiling()向上取整,power()是取2的次方值;

第二步:N=values&(V-1),&位与运算,

第三步:while N>=num,此时N =N & (CEIL(V/ 2) - 1)

比如插入2020-01-20,V=8,N=(2020)& (8-1)=4。4<6,所以保存在分区4。

代码就不演示了,区别就是by hash换成by linear hash。

2、垂直分区

垂直分区比较少,直接通过key字段名进行划分即可。

垂直分区相当简单。

3、复合分区

上面介绍了水平和复合的方式,复合分区的方式是进行组合。你可以随意搭配。这里演示一种。

父分区使用list,子分区使用垂直分区。

在这里介绍了分区表的一些概念和基础的使用方法。其实分区表也有很多限制。

分区表的限制:

(1)一个表最多只能有1024个分区。

(2)如果分区字段中有主键或者唯一索引的列,那么所有主键列和唯一索引列都必须包含进来。

(3)分区表中无法使用外键约束。

(4)所有分区都必须使用相同的存储引擎。

(5)某些存储引擎不支持分区。比如说merge、InnoDB、CSV、联合存储引擎等。

MERGE存储引擎。 用户定义的分区和MERGE 存储引擎不兼容。分区表无法合并。

联合存储引擎。 FEDERATED不支持 分区表; 不可能创建分区 FEDERATED表。

CSV存储引擎。 CSV不支持使用存储引擎的分区表; 不可能创建分区CSV表。

InnoDB存储引擎。 InnoDB外键和MySQL分区不兼容。分区 InnoDB表不能有外键引用,也不能有外键引用的列。InnoDB具有或由外键引用的表不能分区。

(6)对于MyISAM表,使用分区表时需要打开更多的文件描述符。

所以在使用的时候一定要注意。

mysql 两张表合并查询_mysql中的分区表和合并表详解(一个常见知识点)相关推荐

  1. java excel中重复数据 事务处理_Java导出excel时合并同一列中相同内容的行思路详解...

    一.有时候导出Excel时需要按类别导出,一大类下好几个小类,小类下又有好几个小小类,就像下图: 要实现这个也不难, 思路如下:按照大类来循环,如上就是按照张江校区.徐汇校区.临港校区三个大类循环,然 ...

  2. java 导出如何合并列_Java导出excel时合并同一列中相同内容的行思路详解

    一.有时候导出Excel时需要按类别导出,一大类下好几个小类,小类下又有好几个小小类,就像下图: 要实现这个也不难, 思路如下:按照大类来循环,如上就是按照张江校区.徐汇校区.临港校区三个大类循环,然 ...

  3. mysql 单表 子查询_MySQL基本SQL语句之单表查询、多表查询和子查询 | 旺旺知识库...

    一.简单查询: 基本语法: SELECT * FROM tb_name;查询全部 SELECT field1,field2 FROM tb_name; 投影 SELECT [DISTINCT] * F ...

  4. mysql两个字段相减_MySQL 中NULL和空值的区别?

    作为后台开发,在日常工作中如果要接触Mysql数据库,那么不可避免会遇到Mysql中的NULL和空值.那你知道它们有什么区别吗? 学不动了,也不想知道它们有什么区别.大兄弟,不行啊,要面试! 前些天我 ...

  5. mysql教程排序_MySQL中的排序函数field()实例详解

    前言 我们在日常开发过程中,排序是经常用到的,有时候有这样的需求. 比如,需要在查询结果中根据某个字段的具体值来排序.如下面例子 上面是一张个人信息 表,假如我们想按照'seiki','iris',' ...

  6. mysql between详解_MySQL中BETWEEN子句的用法实例详解

    这篇文章主要介绍了MySQL中BETWEEN子句的用法详解,是MySQL入门学习中的基础知识,需要的朋友可以参考下 可以使用IN子句来代替相结合的"大于等于和小于等于"的条件. 要 ...

  7. mysql 事务隔离详解_MySQL 中事务、事务隔离级别详解

    一.事务的概念 1.事务的概念 2.在mysql中哪些存储引擎(表类型)支持事务哪些不支持 3.事务的四个属性 4.mysql事务的创建与存在周期 5.mysql行为 6.事务的隔离性和性能 7.my ...

  8. mysql中varbinary什么意思_MySQL中的数据类型binary和varbinary详解

    前言 BINARY和VARBINARY与 CHAR和VARCHAR类型有点类似,不同的是BINARY和VARBINARY存储的是二进制的字符串,而非字符型字符串.也就是说,BINARY和VARBINA ...

  9. MySQL 两张表关联更新(用一个表的数据更新另一个表的数据)两个表使用条件从另外一个表获取数据更新本表

    MySQL 两张表关联更新(用一个表的数据更新另一个表的数据)两个表使用条件从另外一个表获取数据更新本表 有两张表,info1, info2 . info1: info2: 方式一:要用info2中的 ...

最新文章

  1. MASM5.0汇编环境安装
  2. 笔记 - Ali Cloud OSS 简介 三种常见数据存储类型
  3. 【ArcGIS风暴】缓冲区分析、叠置分析综合实验案例:购房区域的选择
  4. spring的Bean属性
  5. 红魔游戏手机6S Pro星耀白版开启预约:4399元起10月15日正式首销
  6. zynq开发系列6:创建AXI IP实现PS对PL的数据配置(步骤一)
  7. 坚果云android功能,Android
  8. java 分组求和_java 集合分组求和
  9. 实现阿里云DDNS解析
  10. SAP中生产返工中单独的作业返冲处理分析测试
  11. 第七章递归知识讲解。
  12. Electron设置窗口图标、设置桌面快捷方式图标
  13. 上古卷轴5怎么加补丁_上古卷轴5:想要装MOD的话,小编教你怎么做!
  14. macos安装盘第三方工具制作_如何制作macOS High Sierra USB启动安装盘
  15. WARNING: --master-data is deprecated and will be removed in a future version
  16. C++ STL之stack栈容器
  17. CSS — 表格 和 表单
  18. 空间数据结构(四叉树、八叉树、BVH树、BSP树、k-d树)
  19. 面试资料-JAVA基础知识
  20. springCloud中dependencyManagement、type、scope在父模块和子模块分别的作用

热门文章

  1. windows NT的意义和各个版本
  2. ASP.NET Web API路由规则(二)
  3. NHibernate介绍
  4. linux投屏快捷键,Linux基本指令(持续更新中..)
  5. php插入word图片,如何在PHPOffice / PHPWord模板上添加/设置图像?
  6. 使用adb命令查看Sqlite数据库
  7. 用grep和cut做一些数据统计
  8. Sublime Text 全程指引 by Lucida
  9. Mongo使用navicat解除14天限制
  10. Mysql京东的一道面试题目 比较综合