【问题标题】:Best way to get distinct count from a query joining two tables (multiple join possibilities)从连接两个表的查询中获取不同计数的最佳方法(多种连接可能性)
【发布时间】:2020-07-17 02:45:44
【问题描述】:

我有 2 张桌子,桌子 Actions 和桌子 UsersActions -> Usersmany-one 关联。

Actions(有数千行)

  • 身份证
  • uuid
  • 姓名
  • 类型
  • created_by
  • org_id

表格Users(最多有一百行)

  • 身份证
  • 用户名
  • org_id
  • 组织名称

我正在尝试使用WHERE 子句获得最佳连接查询以获取计数。我需要表Actions 中不同created_bys 的计数,表Users 中包含“myorg”的org_name。另外,(Actions.created_by = Users.username)

我目前有以下查询(产生预期结果),想知道哪个更好,是否可以进一步优化?

查询一:

select count(distinct Actions.created_by)
from Actions join
     Users
     on Users.org_id = Actions.org_id 
where Users.org_name like '%myorg%';

查询2:

select count(distinct Users.username)
from Users join
     Actions
     on Actions.created_by = Users.username 
where Users.org_name like '%myorg%';

【问题讨论】:

  • 这两个查询产生不同的结果。您应该使用能满足您需求的那个。
  • @GordonLinoff,更新了查询,这两个总是产生相同的结果

标签: sql postgresql join postgresql-9.6 postgresql-performance


【解决方案1】:

最快的办法是修改第二个查询:

select count(*)
from Users u
where exists (select 1
              from Actions a
              where a.created_by = u.username 
             )
and u.org_name like '%myorg%';

那么最好的索引是actions(created_by)

【讨论】:

    猜你喜欢
    • 2020-07-16
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2015-04-06
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多