三十二、分区表

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

一、什么是分区表

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


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分区的表。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
设计模式 虚拟化 开发者
利用SwiftUI构建动态列表的高级技巧
【4月更文挑战第14天】 在本文中,我们将深入探讨如何运用SwiftUI框架实现一个具有高度交互性和动态性的列表视图。我们将透过具体实例,展示如何结合SwiftUI的声明式语法与先进的设计模式,来优化列表的性能和用户体验。文中将涵盖数据绑定、动画过渡、以及状态管理的实用技巧,并讨论如何通过这些技术提升应用的响应性和可扩展性。
|
数据库
【解决方案 二十五】如何对Excel表数据进行彻底转置
【解决方案 二十五】如何对Excel表数据进行彻底转置
73 0
|
存储 NoSQL 关系型数据库
三十四、外键约束
三十四、外键约束
133 0
三十四、外键约束
|
XML 数据格式
SAP UI5应用里的列表处理
SAP UI5应用里的列表处理
111 0
SAP UI5应用里的列表处理
|
关系型数据库 MySQL 索引
二十六、唯一索引
二十六、唯一索引
103 0
|
SQL 关系型数据库 MySQL
四十二、导出数据
四十二、导出数据
146 0
|
存储 关系型数据库 测试技术