三十二、分区表

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 三十二、分区表

一、什么是分区表

分区表就是按照某种规则将同一张表的数据分段划分到多个存储位置。对数据的分区存储提高了数据库的性能,被分去存储的数据在物理上是多个文件,但在逻辑上仍然是一个表,对表的任何操作都和没有分区之前一样。在执行增删改查等操作时,数据库会自动通过找到对应的分区,然后执行操作。


Tip:

  1. MySQL 从5.1.3开始支持分区;
  2. 在 MySQL 8.0 中只有 InnoDB 和 NDB 两个存储引擎支持分区。

二、分区表的好处

  1. 存储更多

与单个磁盘或文件系统分区相比,可以存储更多的数据。

  1. 提高查询吞吐

通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量。

  1. 并行处理

设计到 sum()、count() 等聚合函数的查询,可以很容易进行并行处理。

  1. 提升查询效率

一些查询可以极大的优化,查询仅从某个或几个分区中获取数据。

  1. 便于管理

很容易根据分区删除失去保护意义的历史数据。

三、分区表的四种类型

MySQL 支持的分区类型包括 Range、List、Hash 和 Key,最常用的是 Range。


1.Range 分区

允许将数据划分不同范围,是基于属于一个给定连续区间的列值把多行分配个分区。例如将学生表按照出生年划分成若干个分区。创建 Range 分区例子如下:

create table student(
    id int not null auto_increment,
    name varchar(30),
    year int,
    province int,
    primary key(id,year)
)
partition by RANGE(year)(
    partition p1 VALUES LESS THAN (1990) DATA DIRECTORY='d:/data/p1',
     partition p2 VALUES LESS THAN (1995) DATA DIRECTORY='d:/data/p2',
      partition p3 VALUES LESS THAN (2000) DATA DIRECTORY='d:/data/p3',
       partition p4 VALUES LESS THAN MAXVALUE DATA DIRECTORY='d:/data/p4',
)

代码中首先创建了一个 student 表,然后以 year 字段分区,在 SQL 中 p1、p2、p3、p4 是分区名称,紧跟在 VALUES 后面的是分区条件,DATA DIRECTORY 是分区文件存储的位置。这里需要注意的是如果想要使用某个字段进行 Range 分区,则逐渐必须包含分区字段。


2.List 分区

预序系统通过预定义的列表的值来对数据进行分割,是基于列值匹配一个离散集合中的某个值进行选择。例如学生表按照年龄进行分区,示例代码如下:

create table student(
    id int not null auto_increment,
    name varchar(30),
    age int,
    province int,
    primary key(id,age)
)
partition by RANGE(age)(
    partition p1 VALUES IN (20,21,22,23,24),
     partition p2 VALUES IN (25,26,27,28,29),
      partition p3 VALUES IN (30,31,32,33,34)
)

3. Hash 分区
允许通过对表的一个或多个列的 Hash Key 进行计算,最后通过这个 Hash 码不同数值对应的数据区域进行分区。是基于用户定义的表达式返回的值来进行选择分区。例如根据学生的年龄分10个区。示例代码如下:

create table student(
    id int not null auto_increment,
    name varchar(30),
    age int,
    province int,
    primary key(id,age)
)
partition by HASH(age)
partition 10;

4. Key 分区
对 Hash 模式的一种延申,这里的 Hash Key 是 MySQL 系统产生的。例如按照学生的年龄分10个区。示例代码如下:

create table student(
    id int not null auto_increment,
    name varchar(30),
    age int,
    province int,
    primary key(id,age)
)
partition by key(age)
partition 10;

四、常用分区其他操作

1. 新增分区

# 语法
alter table 'table_name' add partition(分区条件)
# 例子
alter table 'student' add partition(paetition p5 VALUES LESS THAN MAXVALUE);

2. 对已存在的表进行分区

# 语法
alter table 'table_name' partition by 分区类型(分区条件列)(
    分区条件
)
# 例子
alter table 'student' partition by RANGE(age)(
    partition p1 VALUES LESS THAN (20) DATA DIRECTPRY='d:/data/p1',
    partition p2 VALUES LESS THAN (30) DATA DIRECTPRY='d:/data/p2',
    partition p3 VALUES LESS THAN (40) DATA DIRECTPRY='d:/data/p3',
    partition p4 VALUES LESS THAN MAXVALUE DATA DIRECTPRY='d:/data/p4',
)

3. 删除分区

# 语法
alter table 'table_name' drop partition 分区名称;
# 例子
alter table 'student' drop partition p1;

4. 移除分区

# 语法
alter table 'table_name' remove partitioning
# 例子
alter table 'student' remove partitioning

Tip:删除分区会删除分区下的数据,移除分区数据不会被移除,另外删除分区可以指定要删除的分区,但移除分区是移除整个表的分区。删除分区不适用于使用 HASH分区的表。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
计算机基础之磁盘的分区和扩展
计算机基础之磁盘的分区和扩展
351 0
|
存储 NoSQL Java
数据系统分区设计 - 分区与二级索引
目前的分区方案都依赖KV数据模型。KV模型简单,都是通过K访问记录,自然可根据K确定分区,并将读写请求路由到负责该K的分区。
114 0
|
存储 SQL 弹性计算
分布式事务与数据分区(二)|学习笔记
快速学习分布式事务与数据分区(二)
分布式事务与数据分区(二)|学习笔记
|
存储 SQL NoSQL
分布式事务与数据分区(一)|学习笔记
快速学习分布式事务与数据分区(一)
分布式事务与数据分区(一)|学习笔记
|
存储 分布式数据库 数据库
分布式事务与数据分区(三)|学习笔记
快速学习分布式事务与数据分区(三)
|
存储 弹性计算 算法
分布式事务与数据分区(四)|学习笔记
快速学习分布式事务与数据分区(四)
|
关系型数据库 MySQL 索引
二十六、唯一索引
二十六、唯一索引
133 0
|
存储 架构师 关系型数据库
分库、分表、分区的区别,傻傻分不清?
说过很多次,不要拘泥于某一个技术的一点,技术是相通的。重要的是编程思想,思想是最重要的。当数据量大的时候,需要具有分的思想去细化粒度。当数据量太碎片的时候,需要具有合的思想来粗化粒度。
|
SQL 大数据 程序员
好程序员大数据培训开发之掌握Hive的静态分区与动态分区
  **好程序员**大数据培训的终极目标是将你培养成一名“复合型”研发人才,让你自己在掌握相关大数据技术的同时,也能够赢得一份高薪职位!好程序员大数据开发采用“T”字形的思维,以大数据的深度为主,以机器学习、云计算等作为宽度,相辅相成。
1510 0