MySQL分区 (分区介绍与实际使用)

一、什么是分区

  所谓分区,就是将一个表分成多个区块进行操作和保存,从而降低每次操作的数据,提高性能。而对于应用来说则是透明的,从逻辑上看只有一张表,但在物理上这个表可能是由多个物理分区组成的,每个分区都是独立的对象,可以进行独立处理。

二、分区能干什么?

  1.可以逻辑数据分割,分割数据能够有多个不同的物理文件路径。

  2.可以存储更多的数据,突破系统单个文件最大限制。

  3.提升性能,提高每个分区的读写速度,提高分区范围查询的速度。

  4.可以通过删除相关分区来快速删除数据

  5.通过跨多个磁盘来分散数据查询,从而提高磁盘I/O的性能。

  6.涉及到例如SUM()、COUNT()这样聚合函数的查询,可以很容易的进行并行处理。

  7.可以备份和恢复独立的分区,这对大数据量很有好处。

三、分区能支持的引擎

  MySQL支持大部分引擎创建分区,入MyISAM、InnoDB等;不支持MERGE和CSV等来创建分区。同一个分区表中的所有分区必须是同一个存储引擎。值得注意的是,在MySQL8版本中,MyISAM表引擎不支持分区。

四、确认MySQL支持分区

  从MySQL5.1开始引入分区功能,可以如下方式查看是否支持:

  老版本用:SHOW VARIABLES LIKE '%partition%';

  新版本用:show plugins;

五、分区类型

  1. RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。

    比如 id 1-100的分配到一起,101-200的分配到一起,201-300的分配到一起 等等...

  2. LIST分区:类似于RANGE分区,LIST是列值匹配一个离散值集合中的某个值来进行选择。

    比如 根据字段 把值为1、3、5的放到一起,2、4、6的另外放到一起 等等...
  3. HASH分区:基于用户定义的表达式的返回值来进行选择分区,该表达式使用将要插入到表中的这些行的列值来进行计算,这个函数必须产生非负整数值。

  通过HASH运算来进行分区,分布的比较均匀
  4. KEY分区:类似于按HASH分区,由MySQL服务器提供其自身的哈希函数。

  按照KEY进行分区类似于按照HASH分区

六、无论什么类型的分区,都要注意以下问题

  1. 如果表中存在primary key 或者 unique key 时,分区的列必须是paimary key或者unique key的一个组成部分,也就是说,分区函数的列只能从pk或者uk这些key中取子集

  2. 如果表中不存在任何的paimary key或者unique key,则可以指定任何一个列作为分区列

  3. 5.5版本前的RANGE、LIST、HASH分区要求分区键必须是int;MySQL5.5及以上,支持非整形的RANGE和LIST分区,即:range columns 和 list columns (可以用字符串来进行分区)。

七、分区命名

  1. 分区的名字基本上遵循其他MySQL 标识符应当遵循的原则,例如用于表和数据库名字的标识符。应当注意的是,分区的名字是不区分大小写的。

  2. 无论使用何种类型的分区,分区总是在创建时就自动的顺序编号,且从0开始记录。

八、 创建分区

1. RANGE分区:

CREATE TABLE tbl_test (   uuid INT NOT NULL,   title VARCHAR(20) ) PARTITION BY RANGE (uuid) ( PARTITION p0 VALUES LESS THAN (5), PARTITION p1 VALUES LESS THAN (10), PARTITION p2 VALUES LESS THAN (15), PARTITION p3 VALUES LESS THAN MAXVALUE );

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwjzs.html