SQL: Почему вычисление подсчетов для двух таблиц в одной инструкции выполняется медленно? - PullRequest
0 голосов
/ 09 октября 2018
select count(distinct ec.logicalid) from event_counts ec where ec.eventname = 'Searches'

select count(a.logicalid) from sf_accounts a

Эти два запроса выполняются всего за несколько миллисекунд каждый.

Когда я объединяю запросы в один, я получаю одинаковые результаты, но для запуска требуется две минуты:

select count(distinct ec.logicalid),  count(distinct a.logicalid) from event_counts ec, sf_accounts a where ec.eventname = 'Searches'

Я что-то упустил, что ускорило бы этот запрос?

1 Ответ

0 голосов
/ 09 октября 2018

Потому что вы перекрестно соединяете эти таблицы со старыми стилями.Полагаю, вы не знали, что это происходит, , но вы можете прочитать здесь о том, почему вы не должны их использовать

Полагаю, вы хотели получить результаты в одной таблице.Если это так, используйте подзапросы.

select (
    select count(distinct ec.logicalid) 
    from event_counts ec 
    where ec.eventname = 'Searches'
   ) as firstcount, 
       (
    select count(a.logicalid) 
    from sf_accounts a
   ) as secondcount

В противном случае, правильно объедините свои таблицы

select 
   count(distinct ec.logicalid) 
   ,count(a.logicalid)
from event_counts ec
inner join sf_accounts a on a.logicalid = ec.logicalid
where ec.eventname = 'Searches'
...