PostgreSQL 分区

       由于大量数据存储在数据库同一张表中,后期性能和扩展会受到影响。所以需要进行表分区,因为它可以将大表分成较小的表,从而减少内存交换问题和表扫描,最终提高性能。庞大的数据集被分成更小的分区,更易于访问和管理。

什么是 PGSQL?

PGSQL 是一个开源关系数据库系统。它支持关系 (SQL) 和非关系 (JSON) 查询。它被用作基于 Web 、移动和分析应用程序的主要数据库。

以下是 PGSQL 的一些常见用例:

  • LAPP(Linux、Apache、PostgreSQL 和 PHP)堆栈中的强大数据库。

  • 地理空间数据库。

  • 通用事务数据库。

PGSQL的主要特性

  • 用户定义的数据类型:PGSQL 可以扩展以创建用户定义的数据类型。

  • 复杂的锁定机制:存在三种锁定机制,行级锁、表级锁和资询锁。

  • 表继承:PGSQL 允许基于另一个表创建子表。

  • Foreign Key Referential Integrity:指定外键值对应于另一个表中的实际主键值。

嵌套事务(保存):这意味着子查询的结果不会在其父查询回滚时回滚。但是对于保存,若顶层事务被回滚,所有的保存点也会被回滚。

什么是 PGSQL 分区?

分区是指将一个大表拆分成更小的物理块,这些块可以根据其用途存储在不同的存储介质中。每个部分都有其特点和名称。分区有助于提高数据库服务器的性能,因为需要读取、处理和返回的行数明显减少。您还可以使用 PostgreSQL 分区来划分索引和索引表。

PGSQL 分区主要有两种类型:垂直分区和水平分区。在垂直分区中,我们按列划分,在水平分区中,我们按行划分。

水平分区涉及将不同的行放入不同的表中。例如,您将 18 岁以上学生的详细信息存储在一个分区中,将 18 岁以下的学生详细信息存储在另一个分区中。可以在两个分区上创建联合视图以显示所有学生。

垂直分区包括创建列较少的表,并使用其他表来存储剩余的列。规范化还涉及到跨表的列分割,但是垂直分区不仅限于此,甚至在已经规范化的情况下还会对列进行分区。

如何创建分区表

简单描述一下自己创建分区表的步骤(水平,按创建时间分区)

1. 创建主表 分区键:order_created_time

CREATE TABLE "mac_id_new" ("id" int8,"created_by" varchar(255) COLLATE "pg_catalog"."default","created_time" timestamp(6),"last_modified_by" varchar(255) COLLATE "pg_catalog"."default","last_modified_time" timestamp(6),"deleted" bool,"deleted_by" varchar(255) COLLATE "pg_catalog"."default","deleted_time" timestamp(6),"optimistic_locking_version" int8,"order_id" int8,"order_created_time" timestamp(6)
) PARTITION by range(order_created_time);

2.创建分区表函数 

CREATE OR REPLACE FUNCTION f_create_partition_table(t_name VARCHAR,bengin_date TIMESTAMP ,end_date TIMESTAMP)
RETURNS boolean AS $$
DECLAREcreate_partition_table_sql varchar(1024);create_table_index_sql varchar(1024);create_table_pk_sql varchar(1024);bengin_date_str varchar(64);end_date_str varchar(64);query_partition_table_sql varchar(1024);t_row record;
beginbengin_date_str := to_char(bengin_date,'YYYYMMDD');end_date_str := to_char(end_date,'YYYYMMDD');create_partition_table_sql := ' create table if not exists '||  t_name ||'_' || bengin_date_str  || '_' || end_date_str ||' partition of '||t_name ||' for values from ('''|| bengin_date ||''') ' ||' to ('''|| end_date ||''')';create_table_index_sql := ' CREATE INDEX IF NOT EXISTS idx_'|| t_name ||'_'|| bengin_date_str || '_' || end_date_str ||'_business_id ON '|| t_name ||'_'|| bengin_date_str || '_' || end_date_str || ' USING btree (business_id);';create_table_pk_sql := 'ALTER TABLE '|| t_name ||'_' || bengin_date_str || '_' || end_date_str ||' ADD CONSTRAINT '|| t_name ||'_' || bengin_date_str || '_' || end_date_str ||'_PK PRIMARY KEY ("id");';execute create_partition_table_sql;execute create_table_index_sql;execute create_table_pk_sql;return true;
end;
$$ LANGUAGE plpgsql;

3.创建分区表,执行后刷新数据库,在表mac_id_new下查看验证分区表

SELECT f_create_partition_table('mac_id_new','2023-07-01','2024-01-01');
SELECT f_create_partition_table('mac_id_new','2024-01-01','2024-07-01');
SELECT f_create_partition_table('mac_id_new','2024-07-01','2025-01-01');
SELECT f_create_partition_table('mac_id_new','2025-01-01','2025-07-01');
SELECT f_create_partition_table('mac_id_new','2025-07-01','2026-01-01');

 

最后进行数据迁移,数据校验,至此分区表创建完成

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式之美】面向对象分析方法论与实现(二):需求到接口实现的方法论

文章目录 一. 进行面向对象设计1. 划分职责>需要有哪些类2. 定义类及其属性和方法3. 定义类与类之间的交互关系4. 将类组装起来并提供执行入口 二. 如何进行面向对象编程?1. 接口实现2. 辩证思考与灵活应用 【设计模式之美】面向对象分析方法论与实现&#xff08…

(vue)el-popover鼠标移入提示效果

(vue)el-popover鼠标移入提示效果 效果&#xff1a; 代码&#xff1a; <el-form-itemv-for"(item,index) of ele.algorithmParameters":key"index":label"item.parametersName"class"descInput" ><el-input v-model"i…

linux centos 添加临时ip

### 1.添加ip ip addr add IP/mask dev 网络设备 例&#xff1a;ip addr add 172.104.210.247/24 dev ens5f1 ### 2.启动网卡 ip link set up 网络设备 例&#xff1a;ip link set up ens3f0 ### 3.设置默认路由 ip route add default via GATEWAY 例&#xff1a;ip route add …

Eureka服务端

一般我们Server端会像下图一样&#xff0c;引入Eureka&#xff0c;下面就通过这个来分析Eureka服务端源码流程 一、服务端配置 EnableEurekaServer会引入EurekaServerMarkerConfiguration类 EurekaSeverMarkerConfiguration最终会引入Marker对象&#xff0c;这就是一个标记…

JavaScript中location对象使用【详解】

✨前言✨   本篇文章主要在于&#xff0c;了解并会使用JavaScript中location对象 &#x1f352;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f352;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评论区留言 &…

CNN——AlexNet

1.AlexNet概述 论文原文&#xff1a;ImageNet Classification with Deep Convolutional Neural Networks 在LeNet提出后&#xff0c;卷积神经网络在计算机视觉和机器学习领域中很有名气。但卷积神经网络并没有主导这些领域。这是因为虽然LeNet在小数据集上取得了很好的效果&am…

二叉树链式结构的实现(二叉树的遍历以及各种常用功能函数的实现)

之前也是把堆部分的知识点梳理完毕&#xff08;即二叉树链式顺序的实现&#xff09;&#xff1a;堆的应用&#xff1a;堆排序和TOP-K问题 那么讲完了二叉树链式结构的实现。今天就进入二叉树链式结构的实现&#xff1a; 文章目录 1.准备工作2.二叉树的遍历2.1前序遍历2.2中序遍…

【C语言】程序练习(四)

大家好&#xff0c;这里是争做图书馆扫地僧的小白。非常感谢各位的支持&#xff0c;也期待着您的关注。 目前博主有着C语言、C、linux以及数据结构的专栏&#xff0c;内容正在逐步的更新。 希望对各位朋友有所帮助同时也期望可以得到各位的支持&#xff0c;有任何问题欢迎私信与…

数学公式编译器MathType下载与安装

下载网址&#xff1a;下载 MathType - WIRIS Store 1.点击【下载MathType for Windows】 2、点击中文版 3.找到所下载的目录&#xff1a; 右击-->以管理员身份运行 4、新建word文档 点击文件->账户->关于word 5.点击【文件】、【选项】&#xff0c;❶点击【加载项】…

Elasticsearch:结合 ELSER 和 BM25 文本查询的相关搜索

Elastic Learned Spare EncodeR (ELSER) 允许你执行语义搜索以获得更相关的搜索结果。 然而&#xff0c;有时&#xff0c;将语义搜索结果与常规关键字搜索结果相结合以获得最佳结果会更有用。 问题是&#xff0c;如何结合文本和语义搜索结果&#xff1f; 首先&#xff0c;让我…

SAP BAPI 客户主数据创建:cmd_ei_api=>maintain_bapi

BAPI函数&#xff1a;cmd_ei_api>maintain_bapi 事物代码&#xff1a;XD01/XD02 客户主数据创建、修改、拓展功能开发 数据结构定义&#xff1a; 基本视图信息 公司代码信息结构&#xff1a; 销售视图信息结构: 客户主数据税分类信息结构&#xff1a; 代码参考 详细代码…

众和策略:高股息板块持续红火,煤炭股会否走上慢牛重估之路?

1月3日&#xff0c;煤炭板块连续此前活跃走势&#xff0c;走出日线三连阳。截至收盘&#xff0c;东方财富煤炭板块全体上涨1.75%。盘面显示&#xff0c;35只煤炭股仅有3只股价跌落&#xff0c;其中&#xff0c;云煤动力&#xff08;600792.SH&#xff09;涨停&#xff0c;郑州煤…