前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三十二、分区表

三十二、分区表

作者头像
喵叔
发布2021-06-29 14:39:48
6040
发布2021-06-29 14:39:48
举报
文章被收录于专栏:喵叔's 专栏
一、什么是分区表

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

Tip:

  1. MySQL 从5.1.3开始支持分区;
  2. 在 MySQL 8.0 中只有 InnoDB 和 NDB 两个存储引擎支持分区。
二、分区表的好处
  1. 存储更多 与单个磁盘或文件系统分区相比,可以存储更多的数据。
  2. 提高查询吞吐 通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量。
  3. 并行处理 设计到 sum()、count() 等聚合函数的查询,可以很容易进行并行处理。
  4. 提升查询效率 一些查询可以极大的优化,查询仅从某个或几个分区中获取数据。
  5. 便于管理 很容易根据分区删除失去保护意义的历史数据。
三、分区表的四种类型

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

  1. Range 分区 允许将数据划分不同范围,是基于属于一个给定连续区间的列值把多行分配个分区。例如将学生表按照出生年划分成若干个分区。创建 Range 分区例子如下:
代码语言:javascript
复制
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 分区,则逐渐必须包含分区字段。

  1. List 分区 预序系统通过预定义的列表的值来对数据进行分割,是基于列值匹配一个离散集合中的某个值进行选择。例如学生表按照年龄进行分区,示例代码如下:
代码语言:javascript
复制
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)
)
  1. Hash 分区 允许通过对表的一个或多个列的 Hash Key 进行计算,最后通过这个 Hash 码不同数值对应的数据区域进行分区。是基于用户定义的表达式返回的值来进行选择分区。例如根据学生的年龄分10个区。示例代码如下:
代码语言:javascript
复制
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;
  1. Key 分区 对 Hash 模式的一种延申,这里的 Hash Key 是 MySQL 系统产生的。例如按照学生的年龄分10个区。示例代码如下:
代码语言:javascript
复制
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. 新增分区
代码语言:javascript
复制
# 语法
alter table 'table_name' add partition(分区条件)
# 例子
alter table 'student' add partition(paetition p5 VALUES LESS THAN MAXVALUE);
  1. 对已存在的表进行分区
代码语言:javascript
复制
# 语法
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',
)
  1. 删除分区
代码语言:javascript
复制
# 语法
alter table 'table_name' drop partition 分区名称;
# 例子
alter table 'student' drop partition p1;
  1. 移除分区
代码语言:javascript
复制
# 语法
alter table 'table_name' remove partitioning
# 例子
alter table 'student' remove partitioning

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/06/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么是分区表
  • 二、分区表的好处
  • 三、分区表的四种类型
  • 四、常用分区其他操作
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档