Search Postgresql Archives

Re: Forcing the right queryplan

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Sep 07, 2010 at 07:26:25PM +0200, Alban Hertroys wrote:
  > 
  > Do you have output of explain analyse for these queries as well? It's
  > hard to see what is actually going on with just the explain - we can't
  > see which part of the query is more expensive than the planner
  > expected, for starters.

Hi Alban,

Here are the explain analyse versions:

syslog=# explain analyze SELECT id, devicereportedtime, facility, priority, fromhost, syslogtag, infounitid, message FROM systemevents WHERE (  (to_tsvector('english', message) @@ to_tsquery ( '131.211.112.9')) )  ORDER BY id DESC LIMIT 100;
                                                                               Q
UERY PLAN                                                                       
        
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--------
 Limit  (cost=0.00..1205.09 rows=100 width=158) (actual time=16740.139..2360334.
006 rows=100 loops=1)
   ->  Index Scan Backward using systemevents_pkey on systemevents  (cost=0.00..
2888974.17 rows=239730 width=158) (actual time=16740.137..2360333.916 rows=100 l
oops=1)
         Filter: (to_tsvector('english'::regconfig, message) @@ to_tsquery('131.
211.112.9'::text))
 Total runtime: 2360334.078 ms
(4 rows)

syslog=# explain analyze SELECT id, devicereportedtime, facility, priority, fromhost, syslogtag, infounitid, message FROM systemevents WHERE (  ( to_tsvector('english', message) @@ to_tsquery ( '131.211.112.9')) )  ORDER BY id DESC LIMIT 500000;
                                                                  QUERY PLAN    
                                                               
--------------------------------------------------------------------------------
---------------------------------------------------------------
 Limit  (cost=727944.30..728543.82 rows=239805 width=158) (actual time=1805.251.
.1805.388 rows=464 loops=1)
   ->  Sort  (cost=727944.30..728543.82 rows=239805 width=158) (actual time=1805
.249..1805.300 rows=464 loops=1)
         Sort Key: id
         Sort Method:  quicksort  Memory: 148kB
         ->  Bitmap Heap Scan on systemevents  (cost=61221.23..668806.93 rows=23
9805 width=158) (actual time=9.131..1786.406 rows=464 loops=1)
               Recheck Cond: (to_tsvector('english'::regconfig, message) @@ to_t
squery('131.211.112.9'::text))
               ->  Bitmap Index Scan on msgs_idx  (cost=0.00..61161.28 rows=2398
05 width=0) (actual time=0.790..0.790 rows=464 loops=1)
                     Index Cond: (to_tsvector('english'::regconfig, message) @@ 
to_tsquery('131.211.112.9'::text))
 Total runtime: 1805.483 ms
(9 rows)

  > Odd that more records and a more complicated plan gives faster results...
  > That's why I think we'd really want to see explain analyse output.
  > I'm guessing that there are a lot of records matching your search string

As you can see, there are only 464 matches.

  > One thing I do notice is that the first plan uses the index on id
  > instead of the ts_vector one. For queries like those you could try to
  > use a combined index like this:
  > 
  > CREATE INDEX msgs_idx (to_tsvector('english'::regconfig, message), id)
  > ON systemevents USING (gin);

I will look into this.

Thanks,
-- 
Henk van Lingen, ICT-SC Netwerk & Telefonie,                  (o-      -+
Universiteit Utrecht, Jenalaan 18a, room 0.12                 /\        |
phone: +31-30-2538453                                         v_/_      |
http://henk.vanlingen.net/             http://www.tuxtown.net/netiquette/

-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux