大家星期五好!
关系DBMS课程的开办时间越来越少,因此今天我们将分享有关该主题的另一种有用材料的翻译。

在
PostgreSQL 11的开发过程中,为改善表分区所做的出色工作。
表分区是在PostgreSQL中已经存在了一段时间的功能,但是可以说,实际上它直到版本10才真正存在,在该版本中,它变得非常有用。 前面我们曾说过,表继承是分区的实现,这是事实。 只有这种方法迫使您手动执行大部分工作。 例如,如果要在INSERT期间将元组插入节中,则必须配置触发器来为您执行此操作。 使用继承进行分区非常缓慢,并且难以在其之上开发其他功能。
在PostgreSQL 10中,我们看到了“声明性分区”的诞生,该功能旨在解决使用旧方法进行继承时无法解决的许多问题。 这导致了功能更强大的工具的出现,该工具使我们可以水平分割数据!
功能比较PostgreSQL 11引入了一系列令人印象深刻的新功能,这些功能有助于提高性能并使分区表对应用程序更透明。


1.使用限制性例外
2.仅添加节点
3.仅对于引用了非分区表的分区表
4.索引必须包含一个节的所有关键列
5.两侧部分的限制必须匹配性能表现在这里,我们也有一些好消息! 添加了一种
删除节的新方法。 该新算法可以通过查看
WHERE
查询条件来确定合适的部分。 反过来,先前的算法会检查每个部分,以确定是否可以匹配
WHERE
。 随着部分数量的增加,这导致计划时间的额外增加。
在9.6中,通过继承进行分区,通常通过编写包含一系列IF语句的触发函数将节中的元组插入正确的节中,从而在节中路由元组。 这些功能执行起来可能很慢。 在版本10中添加了声明性分区后,这变得更快了。
使用具有100个部分的分区表,我们可以估计将1000万行加载到1个BIGINT列和5个INT列的表中的性能。

查询此表以搜索一条索引记录并执行DML以操纵一条记录(仅使用1个处理器)的性能:

在这里我们看到,PG 9.6之后,每个操作的性能都显着提高。
SELECT
查询看起来要好得多,尤其是那些可以在查询调度期间排除多个部分的查询。 这意味着调度程序可以跳过之前应该完成的大部分工作。 例如,不再构建不必要部分的路径。
结论分区表已开始成为PostgreSQL中非常强大的功能。
它使您可以快速在线输出数据并离线转换数据,而无需等待缓慢的大规模DML操作完成 。 它还意味着可以将相关数据存储在一起,即可以更有效地访问所需数据。 没有开发人员,审阅者和提交者不遗余力地使用所有这些功能,就不可能在此版本中进行改进。
感谢所有人!
PostgreSQL 11看起来很棒!这是一篇简短但有趣的文章。 分享您的评论,不要忘记注册一个
开放日 ,其中将详细描述课程计划。