【技术文章】PostgreSQL分区表详细步骤

一、PostgreSQL分区表实现逻辑

1.1. 分区类型详解

PostgreSQL支持两种主要的分区类型:

• 范围分区(Range Partitioning)

根据表中某一列的值范围将表分割成若干个分区。例如,我们可以按照时间字段(如日期)创建按年、季度或月份的范围分区。

• 列表分区(List Partitioning)

根据某一列的特定值列表来划分分区。例如,可以根据国家/地区的枚举值进行列表分区。

• hash分区(hash Partitioning)

根据某一列的特定值列表来划分分区。例如,可以根据国家/地区的枚举值进行列表分区。

 

查看表结构

插入数据,查看数据分布

二、分区表维护操作

2.1 添加分区

示例:添加range分区

 

2.2 删除分区

 

2.3 ATTACH分区

ATTACH操作:ATTACH操作用于将一个已存在的表作为分区添加到一个分区表中。这样做的好处是可以将预先填充好数据的表作为分区快速加入到分区表体系中,或者在需要调整分区布局时将一个表转换为分区表的分区。

 

其中:

• partitioned_table:已存在的分区表名。
• new_partition_table:要作为分区添加的已存在的表名,该表应具有与partitioned_table相同的结构,并且其数据应符合所指定的分区范围。
• FOR VALUES IN (partition_range):指定新分区所对应的分区键值范围。partition_range应与分区表的分区策略相匹配。

示例:

假设有一个按年份分区的销售表sales,现在有一张名为sales_2024的表,里面存储了2024年的销售数据,希望将其作为sales表的一个分区。

 

-- 假设sales_2024表已存在且结构与sales表相同,数据均为2024年的销售记录

 

2.3 DETACH分区

DETACH操作:DETACH操作用于从分区表中移除一个现有的分区。

这通常在需要临时独立处理某个分区的数据(如备份、迁移、清理等)或者调整分区布局时使用。

语法:

ALTER TABLE partitioned_table DETACH PARTITION existing_partition;

其中:

• partitioned_table:已存在的分区表名。

• existing_partition:要从分区表中分离出去的现有分区表名。

 

示例:假设要将sales表中存储2023年销售数据的分区sales_2023分离出来,以便单独进行数据清理。

 

 

注意事项:

• ATTACH与DETACH操作都会立即生效,对分区表结构进行更改。在执行这些操作时,应确保没有正在进行的事务依赖于被操作的分区。

• 分离出来的分区表仍保留其数据,可以独立进行查询、更新等操作。但在DETACH之后,该分区不再受分区表的查询优化等特性影响。

• 在ATTACH操作中,新分区表的数据应严格符合所指定的分区范围,否则可能会导致数据完整性问题或查询错误。

• 对于DETACH操作,确保在分离后对分区表的查询不受影响,可能需要调整查询条件或创建合适的索引。

2.4 自动扩建分区

请读者使用pg_partman插件完成

三、分区表优化示例

在处理海量数据的场景下,PostgreSQL的分区表功能成为了提升查询性能和管理效率的关键利器。案例背景一家电子商务公司拥有一个庞大的订单表,表中记录了历年来的所有订单数据。随着业务的发展,订单表的数据量已经达到了数十亿行,导致查询性能严重下滑,尤其在处理特定时间段的报表查询时,响应时间变得极其漫长。问题分析

1. 查询性能低下:由于订单表庞大,任何涉及到全表扫描的查询都会花费很长时间。

2. 数据维护困难:数据清理和归档工作复杂,难以对老旧数据进行高效管理。

分区表优化方案基于上述问题,我们采用了PostgreSQL的范围分区功能对订单表进行优化。

步骤一:创建分区表

首先我们决定按年份对订单表进行范围分区,每年一个分区:

 

-- 创建2010年至2022年的分区

 

--查看当前分区

--模拟数据

步骤二:创建普通表

步骤三:对比性能

1)非分区表

 

2) 分区表

对比以上两个执行计划

效果验证优化后,查询性能有了显著提升,因为查询仅针对特定年份的分区,避免了对整个大表的扫描。此外,数据维护工作也变得更加方便,可以直接操作单个分区进行数据清理和归档。

 

今天就分享到这里,希望对你们有帮助!感恩遇见!感谢有你们!码字不易,如果喜欢希望能够“点赞➕收藏➕关注”,我们建了一个免费技术/资源分享社群、大家一起交流!可直接扫下面二维码添加我,请备注{夏天}拉你入群,希望可以帮到你!

 

声明:

1、2群已满500人!

3群刚开始筹建,满200人后不在邀请新卡友【有想一块交流的可以赶快】

1739022074253.png

添加请备注来意

(禁广告!禁广告!禁广告!发现秒踢拉黑!)

 

image.png

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

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

相关文章

某音逆向-纯算(一)

1 还是使用XHR定位(以抖音评论为例)2 添加日志断点清空控制台,禁用断点,放开断点。 启用断点后 点击打开二级评论,查看生成的日志3 加减乘数算法日志点 监测栈v[p]的变化,包括加减乘除,取余,位运算等运算参数和结果来推算加密算法。a_b参数是由其他参数加密而来,看到参…

本地一键运行大模型神器Ollama + DeepSeek R1尝鲜指南

本地一键运行大模型神器Ollama + DeepSeek R1尝鲜指南 作为AI领域的弄潮儿,你是否苦恼于云端大模型API的高昂成本?想在本机零门槛体验顶尖开源模型?这篇保姆级教程将带你解锁「Ollama+DeepSeek R1」黄金组合,文末附程序员专属玩法彩蛋! 一、Ollama:程序员的本地大模型…

吸烟识别摄像头

吸烟识别摄像头具备24小时不间断监测能力,可以随时发现违规吸烟行为。一旦检测到有人吸烟,系统会立即发出警报或通知管理人员。该系统能够自动生成统计报告,包括每日或每月的违规次数、时间分布以及常见地点等信息。这些数据为决策者提供了重要依据,有助于优化禁烟措施和宣…

社区垃圾分类识别AI算法盒

社区垃圾分类识别AI算法盒在社区垃圾投放站安装后,社区垃圾分类识别AI算法盒便能实时监测垃圾投放情况。当居民前来扔垃圾时,算法盒一旦检测到错误投放的垃圾,例如将可回收物扔进了其他垃圾桶,或者厨余垃圾没有破袋直接扔进垃圾桶等情况,它会立即启动语音提醒功能,清晰地…

在校大学生兼职新选择:轻松陪伴,日结!小乔陪玩平台兼职做陪玩达人(正规纯绿)请不要用异样的眼光看待新型事物

大学生兼职,玩伴兼职,小乔陪玩平台接单,兼职陪用户,看电影,逛街,吃饭.作为一名在校大学生,你是否曾经为生活费发愁?是否想过利用课余时间赚取一些零花钱,但又不想被繁琐的工作束缚?现在,机会来了!一种全新的兼职方式正在悄然兴起,它不仅轻松有趣,还能让你在享受生活的同…

这或许是全网最全的 DeepSeek 使用指南,95% 的人都不知道的使用技巧(建议收藏)

2025年春节过的好快,转眼间,大家又回到了各自工作岗位了,要说这个春节,什么最火,肯定绕不开DeepSeek。 几乎一夜之间,所有人都在关注DeepSeek,甚至我在老家,完全没用过AI的七大姑八大姨,都在问我,DeepSeek是什么,怎么用。 今天就来聊一聊DeepSeek,话不多说,开始。…

hot100-腐烂的橘子

思路 每个腐烂橘子向四周感染一次,直到没有新鲜橘子所需的最少时间。其中一定设计图的遍历,那么是DFS还是BFS?因为要求一层层感染完的最少时间,所以用BFS。即把腐烂橘子放入队列,每次感染一波出队,再把新感染的入队,直到所有腐烂橘子都向四周感染过一次。 为了判断是否有…

DeepSeek-Janus-Pro环境搭建推理测试

引子 北京时间1月28日凌晨,近期爆红的国产大模型DeepSeek在GitHub平台发布了Janus-Pro多模态大模型,这是继Janus发布之后的一次较大幅度升级。该款大模型是2024年11月13日发布的JanusFlow大模型的高级版本。相比前一代模型,Janus-Pro优化了训练策略、扩展了训练数据,模型也…

在 PyTorch 中理解词向量,将单词转换为有用的向量表示

你要是想构建一个大型语言模型,首先得掌握词向量的概念。幸运的是,这个概念很简单,也是本系列文章的一个完美起点。 那么,假设你有一堆单词,它可以只是一个简单的字符串数组。 animals = ["cat", "dog", "rat", "pig"] 你没法直接…

解决 virsh 无法通过 console 登录虚拟机

报错信息解决方法 登录虚拟机 通过 vnc 或者 ssh登录虚拟机 在虚拟机中执行已执行内容 echo "ttyS0" >> /etc/securetty echo "S0:12345:respawn:/sbin/agetty ttyS0 115200, 1152000 xterm" >>/etc/inittab grub2.cfg grep kernel /etc/grub2…

【分享】Ftrans内外网数据交换方案:打破网络边界,高效融合数据!

随着网络技术和互联网技术的成熟和高速发展,来自互联网的安全威胁越来越严重。数据隔离对很多企业来说并不陌生,越来越多的企业选择网络隔离技术来保护网络安全,而在500强企业中,使用网络隔离技术的企业几乎是绝对性的占比。网络隔离后,仍存在数据交换的需求,内外网数据交…

[gym 102428] Fabricating Sculptures

前言 现在补题是不是不太好 思路 转化题意给定列数 \(S\) , 方块数 \(B\) , 求一种摆放方式, 使得每一列的方块数 \(a_i\) 满足 \(a_i \geq 1\) 且 \(a_i\) 呈非严格单峰观察单峰函数的性质, 发现如果按行处理, 就是单调不增的 更一般的, 每一行放置的方块数非严格小于上一行放…