Re: sub select performance
От | Chris Linstruth |
---|---|
Тема | Re: sub select performance |
Дата | |
Msg-id | Pine.BSI.4.33.0305111802140.5852-100000@cello.qnet.com обсуждение исходный текст |
Ответ на | Re: sub select performance (Mathieu Arnold <mat@mat.cc>) |
Список | pgsql-sql |
Wow. Now to dig into the docs to see what you did. Thanks a bunch. $ time psql radius < mailinglist.sqlsessions | connecttime ----------+------------- 7 | 01:47:25 (1 row) 0.04 real 0.00 user 0.00 sys $ Out of almost a million records, too. -- Chris Linstruth <cjl@qnet.com> On Sun, 11 May 2003, Mathieu Arnold wrote: > > > --Le 11/05/2003 09:48 -0700, Chris Linstruth �crivait : > > | > | But this can take 15-30 seconds: > | > | SELECT count(radacctid) AS sessions, > | sum(acctsessiontime) AS connecttime > | FROM radacct > | WHERE radacctid IN > | (SELECT DISTINCT ON (acctsessionid) radacctid FROM radacct > | WHERE username='cjl' > | AND acctstoptime IS NOT NULL > | AND date_trunc('month', now())=date_trunc('month', > | acctstoptime)); > | > | There are probably many different ways to perform this query. My > | main problem is trying to overcome the fact that try as I might, > | I can't stop the occasional duplicate accounting record from being > | inserted so I have to weed them out, hence the "DISTINCT ON > | (acctsessionid)". > > try this : > SELECT count(radacctid) AS sessions, > sum(acctsessiontime) AS connecttime > FROM radacct > JOIN (SELECT DISTINCT ON (acctsessionid) radacctid FROM radacct > WHERE username='cjl' > AND acctstoptime IS NOT NULL > AND date_trunc('month', now())=date_trunc('month', > acctstoptime)) AS subselect USING (radacctid); > >
В списке pgsql-sql по дате отправления: