【技术文章】PostgreSQL分区表

news2024/9/28 17:41:03

引言

PostgreSQL作为一款高度可扩展的企业级关系型数据库管理系统,其内置的分区表功能在处理大规模数据场景中扮演着重要角色。本文将深入探讨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) 分区表

图片

对比以上两个执行计划

图片

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

注: 本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。

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

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

相关文章

OpenStack Yoga版安装笔记(十四)启动一个实例

1、官方文档 OpenStack Installation Guidehttps://docs.openstack.org/install-guide/ 本次安装是在Ubuntu 22.04上进行,基本按照OpenStack Installation Guide顺序执行,主要内容包括: 环境安装 (已完成)OpenStack…

树脂法提纯牛胆汁

牛胆汁中除了含有胆酸外,还含有胆红素、胆固醇、卵磷脂、钠、钾、钙、镁、铁、锌等多种成分。这些成分对人体健康具有一定的益处,如胆红素具有抗氧化作用,卵磷脂有助于降低胆固醇,钠、钾、钙等矿物质对于维持人体正常生理功能也是…

Excel 绝对值怎么求?ABS 函数用法详解

大家好,这里是效率办公指南! 📊 ABS函数在Excel中用于计算数值的绝对值,这在处理财务、科学和日常办公等领域的数据时非常有用。今天,我们将通过一些具体的日常工作案例,来展示ABS函数的实际应用。 ABS函…

Nginx配置及部署前端项目,安排!

哈喽小伙伴们大家好!我是程序媛小李,一位正在往全栈方向发展的前端小姐姐,今天给大家分享一下在日常编码中我们是怎么使用nginx来部署前端项目的! Nginx安装 浏览器输入nginx,来到官网 右边找到doewnload&#xff0c…

计算机视觉学习路线:从基础到进阶

计算机视觉学习路线:从基础到进阶 计算机视觉(Computer Vision)是人工智能和机器学习领域中重要的分支,致力于让计算机能够理解和分析图像、视频等视觉信息。随着深度学习的发展,计算机视觉的应用变得越来越广泛&…

大数据毕业设计选题推荐-广东旅游数据分析系统-Hive-Hadoop-Spark

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

【Kubernetes】常见面试题汇总(四十四)

目录 100.什么是容器资源监视? 101.副本集和复制控制器之间有什么区别? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题,即 “ 汇总(一)~(二十二)” 。 题目 69-113 …

笔记整理—linux进程部分(2)使用fork创建进程

为什么要创建进程,首先每个程序的运行都需要一个进程;多进程实现宏观上的并行。 fork的原理,是进程的分裂生长模式。如果操作系统需要一个新的进程,那么就会以cp的方法得到一个新的进程,此时老的进程是父进程&#xff…

springboot实战学习(8)(登录接口中使用“JWT令牌“完成登录认证)(拦截器的创建与注册)

接着上篇博客学习。上篇博客是在基本完成用户模块的注册接口的开发以及注册时的参数合法性校验、也基本完成用户模块的登录接口的主逻辑的基础上。也提到了"JWT令牌"的组成与使用。具体往回看了解的链接如下。springboot实战学习(7)(JWT令牌的…

基于python数据采集的可视化数据大屏,数据驱动的界面。

众所周知,可视化大屏离不开数据的采集,正式有了各种格式化的数据供给,可视化大屏才千姿百态,在数据采集方面,python优势什么明显,为大家分享一下。 一、python是什么 Python是一种高级、通用、解释型编程…

Acwing 约数

1.试除法 思路分析:利用试除法求一个数的所有约数,思路和判断和求质数的判定类似 一个数N有一个约数d,那么N/d也必然是其约数 约数都是成对出现的,只需要枚举1到 n \sqrt{n} n ​即可,注意不要让一个约数加入两次! …

PDF处理技巧:Windows上的 10 款免费 PDF 编辑器软件

您可以对 PDF 文件做什么?PDF 编辑器使您能够编辑现有文本或添加新字体、突出显示文本、从 PDF 中删除不必要的对象、搜索特定文本等。如果您需要获得所需的 PDF 编辑软件来轻松编辑 PDF,您可以查看免费 PDF 编辑器列表以找出您最喜欢的软件。 Windows上…

【优选算法】(第七篇)

目录 ⽔果成篮(medium) 题目解析 讲解算法原理 编写代码 找到字符串中所有字⺟异位词(medium) 题目解析 讲解算法原理 编写代码 ⽔果成篮(medium) 题目解析 1.题目链接:. - 力扣&#…

Python 学习笔记1 - 认识Python

一、什么是Python 1989 年圣诞节期间,荷兰数学和计算机科学研究学会的Guido van Rossum(吉多.范罗苏姆)决心开发一个新的解释程序,作为 ABC 语言的替代品。这门ABC语言的替代语言被取名为Python,命名来自Guido爱看的的电视剧Mont…

LaTex符号不好记忆?

总结在Matlab中常用的LaTeX符号如下: 1. **希腊字母**: - \alpha 表示 α - \beta 表示 β - \gamma 表示 γ - \delta 表示 δ - \epsilon 表示 ε - \zeta 表示 ζ - \eta 表示 η - \theta 表示 θ - \iota 表示 ι -…

SAP已知事务码查询关联角色

运维期间客户就出现没有某些事务码的权限,要求添加; 想要添加事务码就必须知道这个事务码属于哪个角色;使用SUIM-角色-按菜单中的事务分配,输入事务码,点击执行就可以查看 找到相关的角色之后,用SU01添加至…

【iOS】计算器的仿写

计算器 文章目录 计算器前言简单的四则运算UI界面事件的逻辑小结 前言 笔者应组内要求,简单实现了一个可以完成简单四则运算的计算器程序。UI界面则是通过最近学习的Masonry库来实现的,而简单的四则运算内容则是通过栈来实现一个简单的四则运算。 简单…

只需要两步制作GIF动态图,方便快捷,制作动态表情包的利器!

推荐阅读:Python制作进度条,18种方式全网最全!(不全去你家扫厕所!) 在日常生活中肯定会接触到gif,例如在写文章的时候,有时需要将自己的代码的运行结果展示出来,如果放一…

面试遇到的质量体系10个问题(深度思考)

在某大型公司的招聘面试中关于质量体系本身及建设实践方面的10个问题,这些问题都是偏理论性强一些,但是可以通过这些问题来了解大型公司对质量体系的一些想法和预期的内容,本期先抛出来这10个问题,不附答案,目的就是让…

浏览器用户行为集群建设-数仓建模-数据计算

项目介绍 该项目旨在将集群构建--数仓建模--数据计算通路进行模拟,以达到熟悉整个数据流程的效果。 该项目模拟浏览器后台数据集群身份,收集用户浏览器访问数据传入数据集群,并进行数仓建模,以此基础进行相关计算和看数。 该项…