Лучший способ получить отчетливое количество из запроса, объединяющего две таблицы (несколько вариантов объединения) - PullRequest
1 голос
/ 05 апреля 2020

У меня есть 2 таблицы, таблица Actions и таблица Users. Actions -> Users - это many-one ассоциация.

Таблица Actions (имеет тысячи строк)

  • id
  • uuid
  • имя
  • тип
  • создал_бай
  • org_id

Таблица Users (имеет не более ста строк)

  • id
  • username
  • org_id
  • org_name

Я пытаюсь получить наилучший запрос на соединение, чтобы получить счет с WHERE пункт. Мне нужно количество различных created_by s из таблицы Actions с org_name в таблице Users, которая содержит '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%';

1 Ответ

3 голосов
/ 05 апреля 2020

Самый быстрый подход заключается в изменении второго запроса:

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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...