GaussDB云数据库SQL应用系列—分区表管理

news2024/12/29 10:27:39

目录

前言

一、分区表基本原理

二、分区表主要优势

三、分区表常见场景

四、GaussDB分区表管理(示例)

示例一:创建范围分区表(RANGE)

示例二:创建哈希分区表(HASH)

示例三:创建列表分区(LIST)

五、总结

前言

本文将介绍GaussDB云数据库的分区表技术,包括原理、优势以及如何使用。通过本文,您将了解到如何利用GaussDB云数据库的分区表功能提高数据存储和查询性能。

一、分区表基本原理

  • 分区表是一种数据组织方式,将一张大表按照某个字段的值进行划分,形成多个小表。每个小表独立管理,具有独立的索引和存储空间。这种方式可以提高查询性能和降低存储成本。
  • 在GaussDB云数据库中,分区表可以根据用户需求自动或手动创建。目前行存表支持范围分区、哈希分区、列表分区,列存表仅支持范围分区。

二、分区表主要优势

  • 查询性能提升 :分区表将数据分散到多个小表中,使得查询时只需扫描对应小表的数据,减少了扫描的范围,从而提高了查询速度。
  • 数据维护便捷 :对于大型表,数据维护变得非常困难。而分区表可以将数据分散到多个小表中,使得数据维护更加便捷。例如,对某个分区进行删除操作时,只需要删除该分区对应的小表即可。
  • 扩展性好 :随着业务的发展,数据量会不断增加。分区表可以根据业务需求动态调整分区数量,以满足更高的查询性能和存储需求。

三、分区表常见场景

  • 大数据处理:在处理大量数据时,分区表可以显著提高查询性能和存储效率。通过将数据按照某个字段进行分区,可以减少扫描的数据量,从而提高查询速度。
  • 高并发访问:分区表可以有效地降低单个表的锁竞争,提高并发访问能力。当多个用户同时访问一个分区表时,每个用户只能访问到自己需要的部分数据,降低了锁冲突的可能性。

关于GaussDB,若要把普通表转成分区表,需要新建分区表,然后把普通表中的数据导入到新建的分区表中。因此在初始设计表时,请根据业务提前规划是否使用分区表。

四、GaussDB分区表管理(示例)

示例一:创建范围分区表(RANGE)

范围分区表:将数据基于范围映射到每一个分区,这个范围是由创建分区表时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期,例如将销售数据按照月份进行分区。

1、创建一个按年份分区的订单表:

--创建范围分区表(RANGE)

DROP TABLE orders_1;

CREATE TABLE orders_1 (

id INT PRIMARY KEY,

order_date CHAR(4) ,

customer_id INT,

product_name VARCHAR(255)

) PARTITION BY RANGE (order_date)

( PARTITION p1 VALUES LESS THAN (2021),

PARTITION p2 VALUES LESS THAN (2022),

PARTITION p3 VALUES LESS THAN (2023),

PARTITION P4 VALUES LESS THAN(MAXVALUE));

--查看创建的分区表信息

select relname,parttype,parentid,boundaries from pg_partition where parentid in (SELECT parentid FROM pg_partition where relname='orders_1');

2、写入测试数据并访问

--插入测试数据

INSERT INTO orders_1(id,order_date,customer_id,product_name)VALUES(1001,'2021',100,'商品A');

INSERT INTO orders_1(id,order_date,customer_id,product_name)VALUES(1002,'2022',200,'商品B');

INSERT INTO orders_1(id,order_date,customer_id,product_name)VALUES(1003,'2023',300,'商品C');

--访问分区表:

-- 只查询2020年的数据

SELECT * FROM orders_1 WHERE order_date = 2021;

-- 查询2020年至2022年的数据

SELECT * FROM orders_1 WHERE order_date BETWEEN 2021 AND 2022;

-- 只查询2020年之后的数据(超出范围的数据将被过滤掉)

SELECT * FROM orders_1 WHERE order_date >= 2021;

3、删除/增加/修改

--DROP

ALTER TABLE orders_1 DROP PARTITION P5;

--ADD

ALTER TABLE orders_1 ADD PARTITION P4 VALUES LESS THAN (2024);

ALTER TABLE orders_1 ADD PARTITION P6 VALUES LESS THAN (2025);

ALTER TABLE orders_1 ADD PARTITION P10 VALUES LESS THAN (MAXVALUE);

--RENAME

ALTER TABLE orders_1 RENAME PARTITION P10 TO P5;

--查看创建的分区表信息

select relname,parttype,parentid,boundaries from pg_partition where parentid in (SELECT parentid FROM pg_partition where relname='orders_1') ;

示例二:创建哈希分区表(HASH)

哈希分区表:将数据根据内部哈希算法依次映射到每一个分区中,包含的分区个数由创建分区表时指定。

1、假设我们有一个名为orders_2的大表,包含id(订单ID)、customer_id(客户ID)、order_date(订单日期)等字段。现在我们需要根据customer_id进行分区,以便更好地管理和查询这些数据。

--创建哈希分区表(HASH)

drop TABLE orders_2;

CREATE TABLE orders_2 (

id INT PRIMARY KEY,

customer_id INT,

order_date DATE

) PARTITION BY HASH (customer_id)

( partition p1,

partition p2 );

--查看创建的分区表信息

select relname,parttype,parentid,boundaries from pg_partition where parentid in (SELECT parentid FROM pg_partition where relname='orders_2');

2、写入测试数据并访问

--插入测试数据

INSERT INTO orders_2(id,customer_id,order_date)VALUES(1001,100,date '20230613');

INSERT INTO orders_2(id,customer_id,order_date)VALUES(1002,200,date '20230614');

INSERT INTO orders_2(id,customer_id,order_date)VALUES(1003,300,date '20230615');

INSERT INTO orders_2(id,customer_id,order_date)VALUES(1004,400,date '20230612');

----访问分区表:

--查询customer_id 为100的订单表信息

SELECT * FROM orders_2 WHERE customer_id =100;

--查询customer_id 为100、200的订单表信息

SELECT * FROM orders_2 WHERE customer_id IN (100,200);

--查询customer_id 不是100、200的订单表信息

SELECT * FROM orders_2 WHERE customer_id NOT IN (100,200);

3、删除

--删除分区表 drop table

DROP TABLE orders_2 ;

--删除分区数据 truncate分区

alter table orders_2 truncate partition p2;

示例三:创建列表分区(LIST)

列表分区表:将数据中包含的键值分别存储在不同的分区中,依次将数据映射到每一个分区,分区中包含的键值由创建分区表时指定。

1、以订单表为例,创建一个list分区表

--创建列表分区(LIST)

DROP TABLE orders_3;

CREATE TABLE orders_3 (

id INT PRIMARY KEY,

customer_id INT,

order_date DATE,

product_id INT,

quantity INT

) PARTITION BY LIST (customer_id) (

PARTITION p1 VALUES (100),

PARTITION p2 VALUES (200),

PARTITION p3 VALUES (300),

PARTITION p4 VALUES (400),

PARTITION p5 VALUES (500)

);

--查看创建的分区表信息

select relname,parttype,parentid,boundaries from pg_partition where parentid in (SELECT parentid FROM pg_partition where relname='orders_3');

2、写入测试数据并访问

--插入测试数据

INSERT INTO orders_3(id,customer_id,order_date,product_id,quantity)VALUES(1001,100,date '20230613',1,10);

INSERT INTO orders_3(id,customer_id,order_date,product_id,quantity)VALUES(1002,100,date '20230613',2,20);

INSERT INTO orders_3(id,customer_id,order_date,product_id,quantity)VALUES(1003,100,date '20230613',3,30);

INSERT INTO orders_3(id,customer_id,order_date,product_id,quantity)VALUES(1004,100,date '20230613',4,40);

--访问分区表

--根据分区字段查询

select * from orders_3 where customer_id = 100

--根据分区P1查询

select * from orders_3 partition (p1);

3、ADD/TRUNCATE/DROP

--ADD,增加分区

ALTER TABLE orders_3 add partition p6 values (600);

--TRUNCATE,删除分区数据

ALTER TABLE orders_3 truncate partition p6;

--DROP,删除分区表

ALTER TABLE orders_3 drop partition p6;

五、总结

GaussDB云数据库是一款高性能、高可用的云原生关系型数据库,支持多种数据存储和计算引擎。其中,分区表是GaussDB云数据库的一项重要特性,在GaussDB云数据库中使用分区表,可以帮助用户提高查询性能、降低存储成本、方便数据维护等方面的问题。

——结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/661889.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python基础(8)——转换数据类型

Python基础(8)——转换数据类型 文章目录 Python基础(8)——转换数据类型目标一. 转换数据类型的作用二. 转换数据类型的函数三. 快速体验四. 实验总结 目标 数据类型转换的必要性数据类型转换常用方法 一. 转换数据类型的作用 …

【数据库原理与实践】DS系的期末考题(2023)

前排感谢 感谢在数据库期末考试中进行截图保存题目的大数据同学,给隔壁计算机同学一些小安慰呜呜 选择题 由于顺序其实无关紧要,这里遂不再按题号进行整理 答案仅是本人初步作答,可能存在错误,欢迎指出 8:B 数据的定义:数据库中存储的基本对象 9:ABC 数据库系统DBS组…

神经网络中的损失函数

在《神经网络中常见的激活函数》一文中对激活函数进行了回顾,下图是激活函数的一个子集—— 而在神经网络领域中的另一类重要的函数就是损失函数,那么,什么是损失函数呢? 损失函数是将随机事件或其有关随机变量的取值映射为非负实…

网络安全学术顶会——CCS '22 议题清单、摘要与总结(上)

注意:本文由GPT4与Claude联合生成。 按语:ChatGPT在计算机领域的翻译质量还是欠缺一些,翻译出来的中文有的不够自然,经常完全按照英文的表达方式来,导致中文特别长,很绕。GPT4的翻译效果相对ChatGPT效果要好…

第38步 深度学习图像识别:VGG19建模(Tensorflow)

基于WIN10的64位系统演示 一、写在前面 (1)预训练模型和迁移学习 预训练模型就像是一个精心制作的省力工具,它是在大量的数据上进行训练,然后将学习到的模型参数保存下来。然后,我们可以直接使用这些参数&#xff0…

gitlab_ci.yml展示单元测试报告 (FREE)

CI/CD 流水线通常包含验证您的代码的测试作业。 如果测试失败,流水线将失败并通知用户。处理合并请求的人必须检查作业日志并查看测试失败的地方,以便可以修复它们。 您可以将作业配置为使用单元测试报告,极狐GitLab 会显示有关合并请求的报…

一种实现Spring动态数据源切换的方法 | 京东云技术团队

1 目标 不在现有查询代码逻辑上做任何改动,实现dao维度的数据源切换(即表维度) 2 使用场景 节约bdp的集群资源。接入新的宽表时,通常uat验证后就会停止集群释放资源,在对应的查询服务器uat环境时需要查询的是生产库…

SegNeXt:重新思考语义分割中卷积注意力设计

论文链接:https://arxiv.org/abs/2209.08575 github: https://github.com/Visual-Attention-Network/SegNeXt 参考视频:【翻译成中文带你读】SegNext论文逐行精读,30分钟就能快速了解其奥秘!-人工智能/深度学习/计算…

Triton教程---存储代理

Triton教程—存储代理 存储库代理使用在加载或卸载模型时运行的新功能扩展了 Triton。 您可以在加载模型时引入自己的代码来执行身份验证、解密、转换或类似操作。 测试版:存储库代理 API 是测试版质量,并且会针对一个或多个版本进行非向后兼容的更改。…

牛客网 2023 最新 “Java 面试八股文+各大厂的面试真题“出炉,面面俱到,太全了

一转眼 2023 年已经过了大半了,不知道你金三银四上岸了,还是等着秋招呢?大家从 Boss 直聘上或者其他招聘网站上都可以看到 Java 岗位众多,Java 岗位的招聘薪酬天差地别,人才要求也是五花八门。而很多 Java 工程师求职过…

css3 grid 布局

特别声明:这篇博客转载于阮一峰老师,转载是为了方便日后复习,实在写的太棒了。 目录 一、概述 二、基本概念 2.1 容器和项目 2.2 行和列 2.3 单元格 2.4 网格线 三、容器属性 3.1 display 属性 3.2grid-template-columns 属性&#x…

[Studio3T]无限试用

新建文本文件 echo off ECHO 重置Studio 3T的使用日期...... REG DELETE "HKEY_CURRENT_USER\Software\JavaSoft\Prefs\3t\mongochef\enterprise" /f RMDIR /s /q %USERPROFILE%\.3T\studio-3t\soduz3vqhnnja46uvu3szq-- RMDIR /s /q %USERPROFILE%\.3T\studio-3t\L…

数字电路基础---触发器

数字电路基础---触发器 触发器(Flip-Flop)也是数字电路中的一种具有记忆功能的逻辑元件。触发器对脉冲边沿敏感的存储单元电路,它只在触发脉冲的上升沿(或下降沿)瞬间改变其状态。在数字电路中可以记录二进制数字信号“…

crfclust.bdb过大

有套11204集群环境,现场反馈/u01使用率100%,数据库无法使用了,本以为是aud文件太多导致的,查看后发现是crfclust.bdb多大了,有100多G了 [roothydb1 hydb1]#du -sh crfclust.bdb 101G crfclust.bdb [roothydb1 hydb…

31个最佳 JavaScript 片段

这里有 20 个有用的 JavaScript 片段,可以在您处理项目时为您提供帮助: 1.获取当前日期和时间: const now new Date(); 2. 检查变量是否为数组: Array.isArray(variable); 3.合并两个数组: const newArray array1.co…

学习svg 基本使用

一.实例展示 1.鼠标移动 <svg width"34px" height"34px" viewBox"0 0 34 34" version"1.1" xmlns"http://www.w3.org/2000/svg" dcindex"189"><g id"画板" stroke"none" stroke-wi…

机器学习-学习总结

1.课程整体目录&#xff1a; 2.课程地址 飞桨AI Studio - 人工智能学习与实训社区 2.1 回归 2.1.1线性回归和逻辑回归的联系和区别 【ML】线性回归和逻辑回归的联系和区别_逻辑回归和线性回归的区别_机器不学习我学习的博客-CSDN博客 2.1.2 线性回归和逻辑回归重要公式推导…

自然语言处理: 第三章NPLM(Neural Probabilistic Language Mode)

理论基础 NPLM的全称是"Neural Probabilistic Language Model"&#xff0c;即神经概率语言模型。这是一种基于神经网络的语言模型&#xff0c;用于生成自然语言文本。最早是由Bengio 在2003年的A Neural Probabilistic Language Model一文中提出来的&#xff0c; NP…

卖家必读,深入了解亚马逊,速卖通,temu测评补单方式的各种利弊

大部分人对补单的认识还停留在刷好评、信誉上&#xff0c;事实上&#xff0c;信誉等级和好评仅是补单的目标之一&#xff0c;不是目标的全部。 对于一个真正的老手来说&#xff0c;补单真正的目的是提升自己宝贝的权重和搜索排名。因为信誉等级和好评相对来说比较简单。 我们试…

从零开始 Spring Boot 43:DI 注解

从零开始 Spring Boot 43&#xff1a;DI 注解 图源&#xff1a;简书 (jianshu.com) Spring 通过注解实现 DI&#xff08;依赖注入&#xff09;&#xff0c;本文详细讨论这些注解。 Autowired Autowired是 Spring 定义的注解&#xff0c;属于包org.springframework.beans.fac…