【问题标题】:Postgresql CTE perfomance issuesPostgresql CTE 性能问题
【发布时间】:2019-12-02 11:37:49
【问题描述】:

我在查询中使用 CTE 时遇到性能问题。

这些查询很大,但它们之间的唯一区别是在IN 子句中侦听的 ID 数量。

第一个在IN 子句中包含 2000 个 ID,第二个只有 1000 个。

第一个执行时间约为33s,第二个 - 500ms。

我也尝试增加/减少 ID 的数量,但无法找到性能下降的关键数字。

3000 个 ID - 36 秒

4000 个 ID - 39 秒

所以它不会线性增长,在 1000 到 2000 个 ID 之间的某个位置是那个关键点,但原因是什么?

为他们分析:

第一个(慢一个)

https://gist.github.com/DonKeyHot1/7251adab3ca589c55ebead2ba75fbcf1

第二(快一)

https://gist.github.com/DonKeyHot1/48d85eaeeb84316bb43adf50114914d3

(它们太大,无法在此处发布)

【问题讨论】:

    标签: sql postgresql performance common-table-expression postgresql-11


    【解决方案1】:

    评论太长了。

    不使用 CTE,而是将 ids 放入临时表中,以表中的id 作为主键:

    create table temp_ids (
        id int primary key
    );
    

    这应该有助于优化器生成一个好的执行计划。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-28
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多