MySQL 分区表

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

MySQL 分区表

 

概述

 

MySQL 分区表是一种将数据表按一定规则分成多个小表的技术,每个小表称为一个分区。分区表通过分散存储和处理数据,提高查询和管理性能,特别适用于大规模数据的管理。

 

分区表分为水平分区和垂直分区。水平分区是按行进行分割,而垂直分区是按列进行分割。MySQL 主要支持水平分区。

 

分区类型

 

MySQL 支持以下几种分区类型:

 

RANGE 分区

 

RANGE 分区根据列值的范围划分,将表按指定的数值范围分割成多个部分。

 

```sql
CREATE TABLE employees (
    id INT,
    name VARCHAR(50),
    hire_date DATE
)
PARTITION BY RANGE (YEAR(hire_date)) (
    PARTITION p0 VALUES LESS THAN (1991),
    PARTITION p1 VALUES LESS THAN (2001),
    PARTITION p2 VALUES LESS THAN (2011),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);
```

 

LIST 分区

 

LIST 分区根据列值的列表进行分割。

 

```sql
CREATE TABLE employees (
    id INT,
    name VARCHAR(50),
    department VARCHAR(50)
)
PARTITION BY LIST COLUMNS(department) (
    PARTITION p0 VALUES IN ('HR', 'Finance'),
    PARTITION p1 VALUES IN ('Engineering', 'Sales'),
    PARTITION p2 VALUES IN ('Marketing')
);
```

 

HASH 分区

 

HASH 分区根据列值的哈希值进行分割。

 

```sql
CREATE TABLE employees (
    id INT,
    name VARCHAR(50),
    department VARCHAR(50)
)
PARTITION BY HASH(id)
PARTITIONS 4;
```

 

KEY 分区

 

KEY 分区类似于 HASH 分区,但仅支持 MySQL 自定义的哈希函数。

 

```sql
CREATE TABLE employees (
    id INT,
    name VARCHAR(50),
    department VARCHAR(50)
)
PARTITION BY KEY(id)
PARTITIONS 4;
```

 

分区管理

 

添加分区

 

可以使用 `ALTER TABLE` 语句添加新的分区。

 

```sql
ALTER TABLE employees
ADD PARTITION (PARTITION p4 VALUES LESS THAN (2021));
```

 

删除分区

 

可以使用 `ALTER TABLE` 语句删除指定分区。

 

```sql
ALTER TABLE employees
DROP PARTITION p4;
```

 

合并分区

 

MySQL 不支持直接合并分区,但可以通过重新创建表来实现合并分区。

 

```sql
CREATE TABLE employees_new (
    id INT,
    name VARCHAR(50),
    hire_date DATE
)
PARTITION BY RANGE (YEAR(hire_date)) (
    PARTITION p0 VALUES LESS THAN (2001),
    PARTITION p1 VALUES LESS THAN MAXVALUE
);
 
INSERT INTO employees_new SELECT * FROM employees;
 
RENAME TABLE employees TO employees_old, employees_new TO employees;
 
DROP TABLE employees_old;
```

 

分区优势

 

1. **提高查询性能**:分区表将数据分散存储,可以加快查询速度,特别是对特定分区进行查询时。

2. **便于管理**:可以对单个分区进行独立操作,如添加、删除、备份等,而无需影响整个表。

3. **提高可用性**:分区表可以将数据存储在不同的存储设备上,增强数据的可靠性和可用性。

 

分区劣势

 

1. **复杂性增加**:分区表的设计和管理较为复杂,需考虑分区键的选择和分区策略的设计。

2. **限制较多**:MySQL 分区表有一些限制,如主键和唯一索引必须包含分区键,某些功能在分区表中不可用。

 

示例代码

 

下面是一个完整的示例代码,演示如何创建一个 RANGE 分区表,并进行一些基本操作。

 

```sql
-- 创建表
CREATE TABLE sales (
    id INT NOT NULL,
    sale_date DATE NOT NULL,
    amount DECIMAL(10,2) NOT NULL
)
PARTITION BY RANGE (YEAR(sale_date)) (
    PARTITION p0 VALUES LESS THAN (2010),
    PARTITION p1 VALUES LESS THAN (2015),
    PARTITION p2 VALUES LESS THAN (2020),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);
 
-- 插入数据
INSERT INTO sales (id, sale_date, amount) VALUES 
(1, '2009-12-31', 100.00),
(2, '2011-06-15', 200.00),
(3, '2014-11-30', 300.00),
(4, '2018-03-21', 400.00);
 
-- 查询特定分区的数据
SELECT * FROM sales PARTITION (p1);
 
-- 添加分区
ALTER TABLE sales
ADD PARTITION (PARTITION p4 VALUES LESS THAN (2025));
 
-- 删除分区
ALTER TABLE sales
DROP PARTITION p4;
```

 

通过上述示例,可以了解如何创建分区表、插入数据、查询特定分区以及管理分区。在实际应用中,可以根据具体需求选择合适的分区策略,提高数据库的性能和管理效率。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
14天前
|
存储 关系型数据库 MySQL
【MySQL技术内幕】4.8-分区表
【MySQL技术内幕】4.8-分区表
22 0
|
18天前
|
分布式计算 DataWorks 关系型数据库
实时数仓 Hologres产品使用合集之如何将MySQL数据初始化到分区表中
实时数仓Hologres的基本概念和特点:1.一站式实时数仓引擎:Hologres集成了数据仓库、在线分析处理(OLAP)和在线服务(Serving)能力于一体,适合实时数据分析和决策支持场景。2.兼容PostgreSQL协议:Hologres支持标准SQL(兼容PostgreSQL协议和语法),使得迁移和集成变得简单。3.海量数据处理能力:能够处理PB级数据的多维分析和即席查询,支持高并发低延迟查询。4.实时性:支持数据的实时写入、实时更新和实时分析,满足对数据新鲜度要求高的业务场景。5.与大数据生态集成:与MaxCompute、Flink、DataWorks等阿里云产品深度融合,提供离在线
|
19天前
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之当需要将数据从ODPS同步到RDS,且ODPS表是二级分区表时,如何同步所有二级分区的数据
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
24 7
|
1月前
|
监控 负载均衡 关系型数据库
MySQL技能完整学习列表13、MySQL高级特性——1、分区表(Partitioning)——2、复制(Replication)——3、集群(Clustering)
MySQL技能完整学习列表13、MySQL高级特性——1、分区表(Partitioning)——2、复制(Replication)——3、集群(Clustering)
64 0
|
8月前
|
存储 关系型数据库 MySQL
MySQL分区表详解
在我们日常处理海量数据的过程中,如何有效管理和优化数据库一直是一个既重要又具有挑战性的问题
70 0
|
10月前
|
存储 关系型数据库 MySQL
【MySQL】MySQL分区表详解
【MySQL】MySQL分区表详解
199 0
|
11月前
|
传感器 关系型数据库 MySQL
php语句:MySQL指定分区表跨分区根据时间条件快速查询记录的封装函数
php语句:MySQL指定分区表跨分区根据时间条件快速查询记录的封装函数
110 0
|
11月前
|
存储 SQL 运维
PolarDB MySQL大表实践-分区表篇
背景:分区表到底是什么?分区作为传统企业级数据库的特性,早已经在很多大数据和数仓场景中得到广泛应用。基于维基百科的解释,分区是将逻辑数据库或其组成元素如表、表空间等划分为不同的独立部分。数据库分区通常是出于可管理性、性能或可用性的原因,或者是为了负载平衡。它在分布式数据库管理系统中很流行,其中每个分区可能分布在多个节点上,节点上的用户在分区上执行本地事务。这提高了具有涉及某些数据视图的常规事务的站
696 0
PolarDB MySQL大表实践-分区表篇
|
存储 关系型数据库 MySQL
高性能 MySQL(十二):分区表
分区表是一个独立的逻辑表,其底层由多个物理子表组成。对分区表的请求,在 MySQL 底层都会被转换为对范围内的物理子表的请求,并将结果合并到一起返回。
107 0
|
存储 SQL 缓存
【MySQL高级】查询缓存、合并表、分区表
【MySQL高级】查询缓存、合并表、分区表
192 0
【MySQL高级】查询缓存、合并表、分区表

热门文章

最新文章