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 по дате отправления:

Предыдущее
От: "Matthew Nuzum"
Дата:
Сообщение: Preventing query from hogging server
Следующее
От: Tom Lane
Дата:
Сообщение: Re: pg_autovacuum not having enough suction ?