从连接两个表的查询中获取不同计数的最佳方法(多个连接可能性)
Best way to get distinct count from a query joining two tables (multiple join possibilities)
我有 2 个 table,table Actions
& table Users
。 Actions
-> Users
是 many-one
关联。
Table Actions
(有几千行)
- 编号
- uuid
- 名字
- 输入
- created_by
- org_id
Table Users
(最多一百行)
- 编号
- 用户名
- org_id
- org_name
我正在尝试获取最佳连接查询以获得带有 WHERE
子句的计数。我需要 table Actions
中不同 created_by
的计数,其中 Table Users
中的 org_name
包含 'myorg'。另外,(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%';
最快的方法是修改第二个查询:
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)
。
我有 2 个 table,table Actions
& table Users
。 Actions
-> Users
是 many-one
关联。
Table Actions
(有几千行)
- 编号
- uuid
- 名字
- 输入
- created_by
- org_id
Table Users
(最多一百行)
- 编号
- 用户名
- org_id
- org_name
我正在尝试获取最佳连接查询以获得带有 WHERE
子句的计数。我需要 table Actions
中不同 created_by
的计数,其中 Table Users
中的 org_name
包含 'myorg'。另外,(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%';
最快的方法是修改第二个查询:
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)
。