欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PostgreSQL分区表实现方法和使用缺点

程序员文章站 2022-06-23 15:47:12
分区表是采用表继承的方式来实现的,主表中不存放任何的数据。 分区表中插入数据可以依赖触发器、也可以使用pg中的rule(规则) 但使用规则有如下的缺点: (1)相比于触发器,该规则有显著的开销,而且...

分区表是采用表继承的方式来实现的,主表中不存放任何的数据。

分区表中插入数据可以依赖触发器、也可以使用pg中的rule(规则)

但使用规则有如下的缺点:

(1)相比于触发器,该规则有显著的开销,而且每次检查是都会有此开销。不过,批量插入时只会有一次开销,所以在批量插入的情况下,去其相对于触发器更有优势。然后在更多的情况下,触发器的方法更好一些。

(2)如果想用copy插入数据,由于copy不会触发“规则”,因此先得把要复制的数据直接copy到分区表(不是主表)。不过,copy是会触发触发器的,所以用触发器的方法就可以正常使用。

(3)如果插入数据是在规则设置之外的,那么会插入到主表中。如果此时希望直接报错,而不是把数据插入到主表中,使用规则是无法实现的。

打开排除约束(constraint_exclusion)是一种查询优化技巧。在pg9.2.4中,参数constraint_exclusion默认就是partition,如果采用默认值,在sql查询中将where语句的过滤条件与表上的check条件进行对比,就可得知不需要扫描的分区,从而跳过相应的分区表,性能也就得到了提高。