Re: Preventing query from hogging server
| От | Rosser Schwarz |
|---|---|
| Тема | Re: Preventing query from hogging server |
| Дата | |
| Msg-id | 37d451f7050324112414d7c9b5@mail.gmail.com обсуждение исходный текст |
| Ответ на | Preventing query from hogging server ("Matthew Nuzum" <matt.followers@gmail.com>) |
| Список | pgsql-performance |
while you weren't looking, Matthew Nuzum wrote:
> select accountid, min(atime) as atime, sessionid from usage_access
> group by accountid,sessionid;
Try something along the lines of:
select ua.accountid
, (select atime
from usage_access
where sessionid = ua.sessionid
and accountid = ua.accountid
order by atime asc
limit 1
) as atime
, ua.sessionid
from usage_access ua
group by accountid
, sessionid
min() and max() currently do table scans, which, on large tables, or
even moderately sized tables with large numbers of accounts/sessions,
can add up. You'll need to replace asc with desc in the subquery for
the max() version.
This form cheats a bit and uses the index to find the highest and
lowest values, provided you've created the appropriate indices.
This is, IIRC, in the FAQ.
/rls
--
:wq
В списке pgsql-performance по дате отправления: