从连接两个表的查询中获得唯一计数的最佳方法(多种连接可能性)

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

我有2个表,表Actions和表UsersActions-> Usersmany-one关联。

Actions(具有数千行)

  • id
  • uuid
  • 名称
  • 类型
  • created_by
  • org_id

Users(最多一百行)

  • id
  • 用户名
  • org_id
  • org_name

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

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

查询1:

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%';
sql postgresql join postgresql-9.6 postgresql-performance
1个回答
0
投票

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

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

然后最佳索引在actions(created_by)上。

© www.soinside.com 2019 - 2024. All rights reserved.