首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通用并行化与PostgreSQL并行

通用并行化与PostgreSQL并行
EN

Stack Overflow用户
提问于 2019-10-18 00:57:01
回答 1查看 872关注 0票数 1

我正在处理一些大型数据,在查询中获得并行计划是必要的。我也非常喜欢使用CTE来表达我的查询,但是在PostgreSQL的文档之后,我不太确定CTE是否对并行性造成了严重的限制。

这里、CTEs和临时表被标记为“并行受限”,其中“并行受限”定义为

并行受限操作是不能在并行工作者中执行的操作,但在使用并行查询时可以在领导者中执行。

这里,对并行限制的描述在考虑CTE方面有一点不同:

如果查询包含顶级或CTE中的数据修改操作,则不会为该查询生成并行计划。

在我的例子中,我没有任何数据修改操作。

如果有的话,CTE会在多大程度上限制我的平行计划的质量?

公平地说,我很难理解第一个定义的含义。因为CTE可以作为临时表来实现,所以我确信这种影响更加重要。第二个定义表明,CTE并行性限制仅与数据修改操作有关。

EN

回答 1

Stack Overflow用户

发布于 2019-10-18 06:43:38

使用CTE很好,在大多数情况下不会妨碍并行执行。

限制是CTE生活在并行领导进程的私有进程状态中,因此并行工作人员不能扫描它。除此之外,PostgreSQL将很高兴地生成一个并行计划。

因此,要避免的事情可能是查询,例如

代码语言:javascript
复制
WITH a AS (SELECT ...)
SELECT ... FROM a JOIN b ...

如果您希望连接被并行化。CTE内部的查询可以并行化(我认为),扫描b也可以并行化。

要实现最佳并行化,可以尝试将查询重写为

代码语言:javascript
复制
SELECT ...
FROM (SELECT ...) AS a
   JOIN b ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58442561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档