首页 > 解决方案 > 从连接两个表的查询中获取不同计数的最佳方法(多种连接可能性)

问题描述

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

Actions(有数千行)

Users(最多有一百行)

我正在尝试获得最佳连接查询以获取带有WHERE子句的计数。我需要一个表中包含“myorg”的表中不同created_bys的计数。另外,(= )Actionsorg_nameUsersActions.created_byUsers.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%';

标签: sqlpostgresqljoinpostgresql-9.6postgresql-performance

解决方案


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

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

然后最好的索引是 on actions(created_by)


推荐阅读