postgresql继承方式实现分区

本文介绍了PostgreSQL如何通过继承实现分区,讨论了分区的原则、注意事项和优势。重点阐述了分区对性能的影响,包括数据管理和查询性能提升,并比较了触发器与规则创建分区的效率。同时,提出了开启约束排除以优化查询性能的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在postgresql中,分区是通过继承的方式来实现的,每个分区实际上都是一个独立的表。数据更新可通过trigger或者规则rule来实现。

对数据表进行分区的一个简单原则就是,当表的大小超过了数据库服务器的物理内存大小时使用分区。

需要注意的几个点:

1、分区表并不能完全的继承父表的所有属性,比如唯一约束、主键、外键。而检查约束与非空约束是可以继承的。

2、修改父表的结构,子表结构同时被修改。

3、reindex、vacuum命令不会影响到子表。

4、不要在父表上定义检查约束,除非你想约束所有分区。

5、不要在父表上创建索引和或唯一约束,因为没有任何意义。应该在每个分区上分别创建。


分区的一些好处:

1、便于管理,如按月分区,若想删除历史数据,可以直接删除对应分区。避免delete大量数据时导致vacuum超载。

2、可以提升某些查询的性能。比如查询的数据正好在某一个或少数几个分区中时,使用率较高的分区表的索引可能会完全缓存到内存中,这样查询效率会很高。

       所以合理的分区方案,能够为应用带来较高的性能提升。

3、查询或更新一个分区的大部分记录时,连续扫描这个分区而不是使用索引离散的访问整个表,可以获得巨大的性能提升。

4、对于不常用的历史数据,可以利用表空间 技术移动到便宜一些的慢速存储介质上。

触发器与规则创建分区的比对:

1、在批量插入的情况下,规则的效率更高,因为只有一次开销。

2、copy方式插入数据,是不会触发规则的,因此需要直接将数据copy到分区表。copy可以触发触发器,但是效率会比直接copy低,因为for each row的触发器只能一条一       条记录的insert,入库性能自然就低了。

对于分区表的一个重要查询优化技巧:

打开约束排除(constraint_exclusioon)。同时在每个分区上创建合适的约束(check)。

比如,按月分区的表,每个分区约束只能插入当月的数据,那么在查询的时候,会将where子句的过滤条件与check进行比对,只能的跳过不需要扫描的分区。查询性能自 然提高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值