当前位置: 首页 > news >正文

【openGauss】分区表的介绍与使用

一、openGauss分区表介绍

在openGauss中,数据分区是在一个节点内部对数据按照用户指定的策略做进一步的水平分表,将表中的数据按照指定方式划分为多个互不重叠的部分。
对于大多数用户使用场景,分区表和普通表相比具有以下优点:

  • 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索效率。
  • 增强可用性:如果分区表的某个分区出现故障,表在其他分区的数据仍然可用。
  • 方便维护:如果分区表的某个分区出现故障,需要修复数据,只修复该分区即可。
  • 均衡I/O:可以把不同的分区映射到不同的磁盘以平衡I/O,改善整个系统性能。

二、分区表类型介绍

openGauss数据库支持范围分区表、列表分区表、哈希分区表:

  • 范围分区表:将数据基于范围映射到每一个分区,这个范围是由创建分区表时指定的分区键决定的。这种分区方式是最为常用的。
    • 范围分区功能(range),即根据表的一列或者多列,将要插入表的记录分为若干个范围(这些范围在不同的分区里没有重叠),然后为每个范围创建一个分区,用来存储相应的数据。用户在CREATE TABLE时增加PARTITION参数,即表示针对此表应用数据分区功能。
  • 列表分区表:将数据基于各个分区内包含的键值映射到每一个分区,分区包含的键值在创建分区时指定。
    • 列表分区功能(list),即根据表的一列,将要插入表的记录中出现的键值分为若干个列表(这些列表在不同的分区里没有重叠),然后为每个列表创建一个分区,用来存储相应的数据。
  • 哈希分区表:将数据通过哈希映射到每一个分区,每一个分区中存储了具有相同哈希值的记录。
    • 哈希分区功能(hash),即根据表的一列,通过内部哈希算法将要插入表的记录划分到对应的分区中。

三、范围分区表操作

1. 分区表创建
create table t1(id int,name varchar(20),score float) partition by range(score)
(
partition p1 values less than(60),  # 存储 score<60 的记录
partition p2 values less than(80),  # 存储 60<=score<80 的记录
partition p3 values less than(90)  # 存储 80=<score<90 的记录
)

再创建分区时还可以为分区指定表空间

create table t1(id int,name varchar(20),score float) partition by range(score)
(
partition p1 values less than(60), 
partition p2 values less than(80), 
partition p3 values less than(90) tablespace tbs1 # 将 p3数据 存储到tbs1表空间中
)
2. 为分区表添加新分区
alter table t1 add partition p4 values less than(MAXVALUE)  # 存储 90<=score 的记录
3. 查询分区表数据
select * from t1

查询指定分区的数据

select * from t1 partition(p1)
4. 将分区表的p4重命名为p44
alter table t1 rename partition p4 to p44
5. 删除分区表的p44分区
alter table t1 drop partition p44
6. 分区分裂

将分区p1在’40’左右切分成两块

alter table t1 split partition p1 at (40) into (partition p0, partition p01)
7.分区表索引

为分区表创建索引,不指定索引分区名称

CREATE INDEX t1_index1 ON t1 (score) LOCAL;

为分区表创建索引,同时指定索引分区名称,并指定score2_index存储于tbs1表空间中

CREATE INDEX t1_index1 ON t1 (score) LOCAL
( PARTITION score1_index, PARTITION score2_index TABLESPACE tbs1, PARTITION score3_index 
)

四、列表分区表操作

1. 分区表创建
create table t2(id int,name varchar(20),region varchar(50)) partition by list(region)
(
partition p1 values('云南','四川','重庆','贵州'),  # 存储区域为指定的四个值其中任意一个值的记录
partition p2 values('北京','上海','深圳','广州')
)
2. 为分区表添加新分区
alter table t2 add partition p3 values(DEFAULT)  # 存储不符合之前的分区指定的值的记录

五、哈希分区表操作

1. 分区表创建
create table t3(id int,name varchar(20),region varchar(50)) partition by hash(id)
(
partition p1,
partition p2,
partition p3
)
2. 为分区表添加新分区
alter table t3 add partition p4
http://www.lryc.cn/news/116298.html

相关文章:

  • 代码随想录算法训练营day57
  • 【基础类】—前后端通信类系统性学习
  • vite项目中使用@代表根路径
  • 冶金化工操作VR虚拟仿真实验软件提高员工们协同作业的配合度
  • SQL Server数据库 -- 索引与视图
  • 2023 java web面试秘籍
  • 2023-08-05力扣今日二题
  • stl_list类(使用+实现)(C++)
  • 利用hfish反控境外攻击源主机
  • 4、Rocketmq之存储原理
  • 在线原型设计工具有好用的吗?就是这10个
  • Vc - Qt - QPainter translate
  • Spark Catalog详解
  • 【Spring专题】手写简易Spring容器过程分析
  • fastadmin自定义键值组件Fieldlist
  • yolov2检测网数据集标注_labelme使用_json2txt格式转换
  • C/C++面试总结
  • Python爬虫的Selenium(学习于b站尚硅谷)
  • springboot 对接 minio 分布式文件系统
  • 前端小练习:案例4.3D图片旋转展示(旋转木马)
  • Linux这17个操作技巧是每个运维工程师应知必会的吧?
  • 音视频基础:分辨率、码率、帧率之间关系
  • Java基础八 - HTTP相关/Cookie/Session/网络攻击
  • 【车道线】TwinLiteNet 复现过程全纪录
  • 七牛云获取qn(url、bucket、access-key、secret-key)
  • 定时任务实现 - Cron表达式知识
  • 【java】抽象
  • Qt应用开发(基础篇)——时间微调输入框 QDateTimeEdit、QDateEdit、QTimeEdit
  • 日撸代码300行:第63天(集成学习之 AdaBoosting-1)
  • 抽象父类获取子类的泛型 或接口泛型