【问题标题】:postgreSql optimisation querypostgreSql 优化查询
【发布时间】:2022-11-12 04:11:53
【问题描述】:
我有一个 postgreSql 数据库。
在这个数据库中,我有两个具有相同外键的表(谁是用户)
所以我有一个表 A(所有用户的列表)和一个表 B(我关注的用户列表)
我想过滤表 A 并添加一个新列,告诉我用户是否在表 B 中。
目前我在多个任务中执行此操作:
- 首先我得到表A中用户的过滤器列表
- 第二个我得到了表B中用户的过滤列表
- 第三我解析表 A 并为每个用户检查它是否存在于表 B 中
我的问题是:
我可以更有效地做到这一点吗?例如在一个查询中?
我希望我足够清楚
预先感谢您的回答
我尝试优化我的代码
如果有人有想法,我会全神贯注
【问题讨论】:
标签:
sql
database
postgresql
performance
optimization
【解决方案1】:
您需要学习根据集合而不是事件顺序进行思考。你发出然后变成更新表,指示用户是否也在表中.这可以使用exists 在单次更新(添加适当的列之后)中完成。 (我假设提到的外键不是彼此,而是第三张表)。 (见demo)
-- 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
);