PostgreSQL 分区表一点也不差

MYSQL 在分区表上的缺失不同,POSTGRESQL 的分区表那算是“硬可”。PG11 已经推出了HASH 分区。具体操作是怎样

首先分区表的大致用途有那些

1  在符合业务的基础上,能对合理的预设的查询提高查询的速度

2  在符合业务的基础上,能对数据的插入降低热点块的竞争,提高插入速度

3  在某些场合合理的访问分区可能顺序的扫描分区内的数据比使用分区内的索引更能提高数据访问的性能。

4  合理的设置分区,会更方便处理无用的数据,统一将一个分区内的数据进行处理。

目前 POSTGRESQL 支持的分区方式有

1   Range Partitiioning

2   List Partitioning

3   Hash Partitioning

与ORACLE 差不多的是,每个分区也是可以有自己的子分区的索引,默认值,或者一些其他定义。

另外一件事情是分区这个事情是需要有预先的设计的,而不是在系统的数据库表已经运行了好长一段时间后,在去做分区表。所以在系统设计之初就做好设计工作是重要的。

下面我们就来做点什么

1 HASH Partitioning  这是在 PG 11 中的新功能 ,通过HASH partitioning 可以加速数据的插入,这也是ORACLE DBA 引以为豪的傲娇点。

下面建立一个HASH分区表,这里已BIGINT 为主键,插入的主键除以10后余数来选择记录的落点。

后面直接插入20万数据不到1 秒就完成了

我们来看看插入的数据,基本上都打散了。

查询也是没有问题,走了主键的索引

而清除一个分区表的数据也很简单,直接删除那个表就可以了

如果想继续恢复那个分区也是很容易的事情

当然如果你想保留数据分区表的部分数据,但又不想他成为分区表中的一员也很简单。

同时PostgreSQL 也同样支持range 分区的类型,通过range 类型的分区可以根据已经设计好的日期,或者其他表中的行数据进行划分,进行分区表存储。

废话不说,建立相关的表和分区表

在建立日期类型的分区表中,要注意到to 是不包含后面指定的时间段,如果设置成 from ('2008-01-01') to ('2008-12-31')  下一个range 设置成 from ('2019-01-01') to ('2019-12-31') 则在插入数据的时候会报

no partition of relation found for row

的问题。

另一个问题是,建立分区表的时候(Postgresql 不建议建立主键,这样会引起以后必要的麻烦,如果需要可以建立唯一索引)

创建一个存储过程来进行数据的插入,看看分区表是否有问题

create or replace procedure insert_data()

language plpgsql

as $$

declare 

date_value timestamp;

declare id int;

begin

date_value := '2007-01-01 00:00:00'::timestamp + '1 hour';

id = 1;

while id < 400000 loop

insert into range_test (password,insert_date) (select id::char(48),date_value::timestamp);

id = id + 1;

date_value  := date_value::timestamp + '1 hour';

end loop;

end;

$$;

通过图中的两条语句来进行数据的验证,没有问题。

根据查询的要求我们还可以建立相关的分区索引

当然如果全表查询,也可以走全局的索引

(SCI三维路径规划对比)25年最新五种智能算法优化解决无人机路径巡检三维路径规划对比(灰雁算法真菌算法吕佩尔狐阳光生长研究(Matlab代码实现)内容概要:本文档主要介绍了一项关于无人机三维路径巡检规划的研究,通过对比2025年最新的五种智能优化算法(包括灰雁算法、真菌算法、吕佩尔狐算法、阳光生长算法等),在复杂三维环境中优化无人机巡检路径的技术方案。所有算法均通过Matlab代码实现,并重点围绕路径安全性、效率、能耗和避障能力进行性能对比分析,旨在为无人机在实际巡检任务中的路径规划提供科学依据和技术支持。文档还展示了多个相关科研方向的案例与代码资源,涵盖路径规划、智能优化、无人机控制等多个领域。; 适合人群:具备一定Matlab编程基础,从事无人机路径规划、智能优化算法研究或自动化、控制工程方向的研究生、科研人员及工程技术人员。; 使用场景及目标:① 对比分析新型智能算法在三维复杂环境下无人机路径规划的表现异;② 为科研项目提供可复现的算法代码与实验基准;③ 支持无人机巡检、灾害监测、电力线路巡查等实际应用场景的路径优化需求; 阅读建议:建议结合文档提供的Matlab代码进行仿真实验,重点关注同算法在收敛速度、路径长度和避障性能方面的表现异,同时参考文中列举的其他研究案例拓展思路,提升科研创新能力。
### 创建和管理PostgreSQL中的分区表 #### 创建分区表的方法 在PostgreSQL中,创建分区表的过程涉及定义父表以及子表。对于同的需求可以选择同类型的分区策略,主要包括范围分区、列表分区和哈希分区[^3]。 - **范围分区**适用于基于数值或日期字段的数据集划分。 ```sql CREATE TABLE measurement ( city_id int not null, logdate date not null, peaktemp int, unitsales int ) PARTITION BY RANGE (logdate); ``` - **列表分区**适合于依据离散值集合来分配数据的情况。 ```sql CREATE TABLE cities ( city_name text primary key, state char(2) ) PARTITION BY LIST (state); ``` - **哈希分区**则用于按照特定列的哈希值均匀分布记录到各个分区内。 ```sql CREATE TABLE t_h AS SELECT * FROM generate_series(1,10000) i; ALTER TABLE t_h SET (autovacuum_enabled = 'false'); CREATE TABLE h_i_1 PARTITION OF t_h FOR VALUES WITH (MODULUS 4, REMAINDER 0); ``` 上述命令展示了同类型分区表的基础结构建立方式[^4]。 #### 管理分区表的方式 为了有效管理和维护这些分区对象,在日常操作过程中需要注意以下几个方面: - 添加新的分区 当业务增长导致现有分区足以容纳新产生的数据时,则需增加额外的分区以扩展存储空间。 ```sql ALTER TABLE measurement ADD PARTITION measurement_y2018m07 START ('2018-07-01') END ('2018-08-01'); ``` - 删除再使用的旧分区 对于过期或者无用的历史数据所对应的分区可以安全移除,从而释放资源。 ```sql DROP TABLE IF EXISTS measurement_y2016m09 CASCADE; ``` - 修改已有分区属性 如果发现某些配置参数设置合理影响到了整体性能表现的话,可以通过调整相应选项来进行优化改进。 ```sql ALTER TABLE ONLY measurement ATTACH PARTITION measurement_y2018m07 FOR VALUES FROM ('2018-07-01') TO ('2018-08-01'); ``` 以上就是针对PostgreSQL内部分区表的一些基本介绍及其具体实践指南[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值