hey folks !

eventually the removing of the group by did improve but still my concern is
why cant we take the result from memory given its same resultset .
But I keep pusing for the developers to move to memcached so we overcome
this limitation .

cheers,
Peter

On Mon, Jun 22, 2009 at 5:23 AM, Robert Haas <robertmh...@gmail.com> wrote:

> On Sun, Jun 21, 2009 at 4:59 PM, Peter Alban<peter.alb...@gmail.com>
> wrote:
> >
> >
> > On Sun, Jun 21, 2009 at 10:01 PM, Justin Graf <jus...@emproshunts.com>
> > wrote:
> >>
> >> Peter Alban wrote:
> >>
> >> duration: 2533.734 ms  statement:
> >>
> >> SELECT news.url_text,news.title, comments.name, comments.createdate,
> >> comments.user_id, comments.comment FROM news, comments WHERE
> >> comments.cid=news.id  AND comments.published='1' GROUP BY
> >> news.url_text,news.title comments.name, comments.createdate,
> >> comments.user_id, comments.comment ORDER BY comments.createdate DESC
> LIMIT 3
> >>
> >>
> >> And here is the query plan :
> >>                                                               QUERY
> >> PLAN
> >>
> >>
> ----------------------------------------------------------------------------------------------------------------------------------------
> >>  Limit  (cost=4313.54..4313.55 rows=3 width=595) (actual
> >> time=288.525..288.528 rows=3 loops=1)
> >>    ->  Sort  (cost=4313.54..4347.26 rows=13486 width=595) (actual
> >> time=288.523..288.523 rows=3 loops=1)
> >>          Sort Key: comments.createdate
> >>          ->  HashAggregate  (cost=3253.60..3388.46 rows=13486 width=595)
> >> (actual time=137.521..148.132 rows=13415 loops=1)
> >>                ->  Hash Join  (cost=1400.73..3051.31 rows=13486
> width=595)
> >> (actual time=14.298..51.049 rows=13578 loops=1)
> >>                      Hash Cond: ("outer".cid = "inner".id)
> >>                      ->  Seq Scan on comments  (cost=0.00..1178.72
> >> rows=13480 width=522) (actual time=0.012..17.434 rows=13418 loops=1)
> >>                            Filter: (published = 1)
> >>                      ->  Hash  (cost=1391.18..1391.18 rows=3818
> width=81)
> >> (actual time=14.268..14.268 rows=3818 loops=1)
> >>                            ->  Seq Scan on news  (cost=0.00..1391.18
> >> rows=3818 width=81) (actual time=0.021..10.072 rows=3818 loops=1)
> >>
> >> The same is being requested from different sessions . So why is it not
> >> being cached .
> >>
> >>
> >> Because the query results are not cached only the RAW tables are.   The
> >> query is rerun every time it is requested.
> >>
> >> What is the group by clause accomplishing???
> >> The sorting and hash Aggregate is eating up all the time
> >
> > So this should mean that having say a 5 mb table in memory doing such
> query
> > above takes 2 secs in memory ?
>
> Nope.  But as others have pointed out, you need to figure out why it's
> taking 2.5 s but EXPLAIN ANALYZE is only saying 300 ms.
>
> There's other things you can do to optimize this query; for example:
>
> 1. Try creating an index on comments (createdate), and don't forget to
> ANALYZE the table afterward, or
>
> 2. Modify the query to remove the probably-unnecessary GROUP BY.
>
> But figuring out the times may be the first thing.  My guess is that
> the 2.5 s time is a time from your logs, maybe at a time when the
> system was busy, and the 300 ms time was what you got it when you ran
> it some other time.  But maybe there's some other explanation.  You
> should try to figure it out.
>
> ...Robert
>

Reply via email to