【问题标题】: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
                              );
    

    【讨论】:

      猜你喜欢
      • 2014-06-13
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多