问题
I have 2 tables, table Actions & table Users. Actions -> Users is many-one association.
Table Actions (has thousands of rows)
- id
- uuid
- name
- type
- created_by
- org_id
Table Users (has a max of hundred rows)
- id
- username
- org_id
- org_name
I am trying to get the best join query to obtain a count with a WHERE clause. I need the count of distinct created_bys from table Actions with an org_name in Table Users that contains 'myorg'. Also, (Actions.created_by = Users.username)
I currently have the below queries (producing expected results) and wonder which is better and if it can be optimized further?
Query 1:
select count(distinct Actions.created_by)
from Actions join
Users
on Users.org_id = Actions.org_id
where Users.org_name like '%myorg%';
Query 2:
select count(distinct Users.username)
from Users join
Actions
on Actions.created_by = Users.username
where Users.org_name like '%myorg%';
回答1:
The fastest approach is to modify the second query:
select count(*)
from Users u
where exists (select 1
from Actions a
where a.created_by = u.username
)
where u.org_name like '%myorg%';
Then the best index is on actions(created_by).
来源:https://stackoverflow.com/questions/61037164/best-way-to-get-distinct-count-from-a-query-joining-two-tables-multiple-join-po