MySQL分区表介绍

作者: 十年磨一剑1111 | 来源:发表于2020-04-02 11:52 被阅读0次

最近一直在复习MySQL分区表相关的知识,就简单整理下读书笔记。下面我们先来对mysql分区简单介绍下。

分区的概述

分区的过程是将一个表或索引分解为多个更小、更可管理的部分。从逻辑上讲,只有一个表或一个索引,但是在物理上这个表或索引可能由数十个物理分区组成,每个分区都是独立的对象,可以独立处理,也可以作为一个更大对象的一部分进行处理。

  1. 支持分区的存储引擎有:InnoDB、MyISAM、NDB等。
  2. MySQL数据库支持的分区类型为水平分区,并不支持垂直分区。
  3. MySQL数据库的分区是局部分区索引,一个分区中既存放了数据又存放了索引,MySQL 不支持全局分区。
  4. 当前MySQL 数据库支持一下几种类型的分区:range分区、list 分区、hash分区、key分区。
  5. 不论是何种分区如果表中存在主键或唯一索引时,分区列必须是唯一索引的一个组成部分。

对于第4小点可能不是很好理解,下面笔者来做几个测试来帮助理解。
(1) 表只包含唯一索引

CREATE TABLE t1 (
col1 INT NOT NULL,
col2 DATE NOT NULL,
col3 INT NOT NULL,
col4 INT NOT NULL,
UNIQUE KEY (col1,col2)
)
PARTITION BY HASH(col3)
PARTITIONS 4;

执行结果:A PRIMARY KEY must include all columns in the table's partitioning function
分析: 由于不满足分区列必须是唯一索引的一个组成部分这一规则,因此报错。如果 改成 partition by hash(col1)或者partition by hash(col2) 又或者是 partition by hash(col1+col2) 都可以执行成功。

(2) 表只包含主键索引

CREATE TABLE t1 (
col1 INT NOT NULL,
col2 DATE NOT NULL,
col3 INT NOT NULL,
col4 INT NOT NULL,
primary key (col1)
)
PARTITION BY HASH(col3)
PARTITIONS 4;

执行结果:A PRIMARY KEY must include all columns in the table's partitioning function
分析 : 同样报错,原因同上。如果改成PARTITION BY HASH(col1) 则会执行成功

(3) 既包含主键索引又包含唯一索引

CREATE TABLE t1 (
col1 INT NOT NULL,
col2 DATE NOT NULL,
col3 INT NOT NULL,
col4 INT NOT NULL,
primary key (col1),
unique key (col3)
)
PARTITION BY HASH(col1+col3)
PARTITIONS 4;

执行结果:A PRIMARY KEY must include all columns in the table's partitioning function
分析:报错,如果是上面这种情况,经测试表明:分区键必须是主键索引和唯一索引共同的那些字段,才能创建成功,所以以上这种情况必须修改索引包含的字段,否则会执行不成功。

(4) 不包含主键,唯一索引,可以指定任何一个列为分区列

CREATE TABLE t1 (
col1 INT NOT NULL,
col2 DATE NOT NULL,
col3 INT NOT NULL,
col4 INT NOT NULL,
KEY (col1, col2)
)
PARTITION BY HASH(col3+col4)
PARTITIONS 4;

执行结果:Query OK, 0 rows affected (0.09 sec)
分析: 由于不包含主键也不包含唯一索引,故对分区键没有特殊的要求,所以执行成功。
上面就简单展示里几个例子,如果有不理解的地方,小伙伴们可以亲自测试下。

水平分区:指将同一表中的不同行的记录分配到不同的物理文件中。
垂直分区:指将同一个表中不同列的记录分配到不同的物理文件中。
局部分区:一个分区既存放了数据又存放了索引。
全局分区:数据存放在各个分区,但是所有数据的索引放在一个对象中。

相关文章

  • MySQL分区表

    确认mysql是否支持分区表 mysql分区表的特点 创建mysql数据表为hash表 常用mysql分区的类型 ...

  • MySQL分区表介绍

    最近一直在复习MySQL分区表相关的知识,就简单整理下读书笔记。下面我们先来对mysql分区简单介绍下。 分区的概...

  • MySQL-分区表

    MySQL-分区表 分区表(于MySQL 5.1引入,v 5.5后可以逐步考虑用于生产环境) 是一个独立的逻辑表,...

  • Mysql 分区表

    MySQL分区表支持RANGE,LIST,HASH,KEY,COLUMNS多种分区算法。 分区表的唯一索引和主键索...

  • MySQL版本

    MySQL版本对比 服务器性能 1.mysql,percona mysql,mariadb均开源,支持分区表,My...

  • pg inherit

    借助表的继承特性PostgreSQL实现了分区表功能,虽然相比Oracle、MySQL的分区表来说其实现过程比较麻...

  • mysql分区表

    首先检查Mysql服务器是否支持分区表: mysql>show plugins 如果显示有partition项,那...

  • hive的严格模式和分区

    相比mysql,hive有严格模式存在,为了不错误扫描整个数据,hive的分区表会将数据分成几个分区。查询分区表中...

  • Mysql 分区表删除

    分区表删除部分分区 使用场景:从 MySQL 5.1 开始,支持分区 创建日志表时建议使用分区方式 在上表的分区表...

  • mysql分区表测试

    mysql分区表测试 mysql部署情况 使用docker-compose在10.xx.xx.1机器进行部署, 端...

网友评论

    本文标题:MySQL分区表介绍

    本文链接:https://www.haomeiwen.com/subject/cpitphtx.html