【问题标题】:PostgreSQL poor lateral join performancePostgreSQL 较差的横向连接性能
【发布时间】:2020-05-16 15:01:14
【问题描述】:

我有桌子

dn_table ~ 10_000 rows

|  DN  |
--------
| 1234 |
| 1235 |
| .... |

sr_table ~ 1m rows

|  SR  |
--------
| 2345 |
| 2346 |
| .... |

我坚持为他们使用横向连接查询。它的性能极差,一些查询运行数小时,具体取决于数据集大小,同时使用限制进行选择。

select
       *
from (
     select
            "alias1"."DN",
            "alias2"."SR"
     from (
          select "alias1"."DN"
          from "dn_table" as "alias1"
          ) as "alias1" left outer join lateral (
             select *
             from "sr_table" as "alias2"
             where "alias1"."DN" = "alias2"."SR"
             limit 1
         ) as "alias2" on true
     ) as "alias"

我尝试对它们使用相关子查询,但它给我带来了我没想到的结果。

提前致谢!

【问题讨论】:

    标签: sql postgresql lateral-join


    【解决方案1】:

    相关子查询和横向连接应该返回相同的结果。

    但对于横向连接,您需要在sr_table(SR) 上建立索引。您可能还需要order by,但这是语义问题,而不是性能问题。

    如果您确实添加了order by,您还需要将这些列包含在索引中。

    【讨论】:

      猜你喜欢
      • 2021-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-09
      • 2020-11-30
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多