PostgreSql优化查询

问题描述 投票:0回答:1

我有一个 PostgreSql 数据库,其中有两个具有相同外键的表(谁是

User
)。

我有一个表 A(所有用户的列表)和一个表 B(我关注的用户列表)。

我想过滤表 A 并添加一个新列来告诉我用户是否在表 B 中。

目前我在多个任务中执行此操作:

  • 首先我得到表A中用户的过滤器列表
  • 第二个我得到表B中用户的过滤列表
  • 第三,我解析表 A,并针对每个用户检查它是否存在于表 B 中

我的问题是:我可以更有效地做到这一点吗?例如在一个查询中?

我希望我说得足够清楚 - 提前感谢您的回答

sql database postgresql performance optimization
1个回答
0
投票

你需要学会根据集合而不是事件的顺序来思考。然后,您的问题将变为 update tablea ,指示用户是否也在 tableb 中。 这可以通过 exists 在单次更新中完成(添加适当的列后)。 (我假设提到的外键不是彼此的,而是第三个表)。 (参见演示

-- one time action
alter table tablea add column in_tableb boolean default false;

--  recurring update 
update tablea a 
   set in_tableb = exists ( select null 
                              from tableb b 
                             where b.user_id = a.user_id
                          );
© www.soinside.com 2019 - 2024. All rights reserved.