Re: Subselect performance question

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Subselect performance question
Дата
Msg-id 18063.1020372973@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Subselect performance question  ("Josh Berkus" <josh@agliodbs.com>)
Список pgsql-sql
"Josh Berkus" <josh@agliodbs.com> writes:
> Under those circumstances, is there a hard-and-fast rule for which
> query I should use?  Most of the time, users will only look at one
> record at a time from the main data set.

> SELECT client_id, client_name, 
>     (SELECT count(*) FROM case_clients WHERE client_id = clients.client_id
> AND case_status = 'ACT') as active_count,
>     (SELECT count(*) FROM case_clients WHERE client_id = clients.client_id
> AND case_status = 'STL') as settled_count,
> FROM clients;

> OR:

> SELECT client_id, client_name,  active_count, settled_count,
> FROM clients 
>     LEFT OUTER JOIN (SELECT client_id, count(*) as active_count FROM
> case_clients WHERE case_status = 'ACT' GROUP BY client_id) ac ON
> ac.client_id = clients.client_id
>    LEFT OUTER JOIN (SELECT client_id, count(*) as settled_count FROM
> case_clients WHERE case_status = 'STL' GROUP BY client_id) sc ON
> sc.client_id = clients.client_id;

The second one looks like a sure loser to me, because of the GROUP BYs.

If you were expecting queries to retrieve many different client_ids,
it *might* be better to use the second form.  But I think for a small
number of client_ids the first will be quicker.
        regards, tom lane


В списке pgsql-sql по дате отправления:

Предыдущее
От: Manfred Koizar
Дата:
Сообщение: Re: Subselect performance question
Следующее
От: "Josh Berkus"
Дата:
Сообщение: Re: Subselect performance question