Skip site navigation (1) Skip section navigation (2)

Re: Why does a simple query not use an obvious index?

From: "Scott Marlowe" <smarlowe(at)qwest(dot)net>
To: "Jack Kerkhof" <jack(dot)kerkhof(at)guest-tek(dot)com>
Cc: pgsql-performance(at)postgresql(dot)org
Subject: Re: Why does a simple query not use an obvious index?
Date: 2004-08-29 18:28:48
Message-ID: 1093804128.5493.22.camel@localhost.localdomain (view raw or flat)
Thread:
Lists: pgsql-performance
On Fri, 2004-08-27 at 11:12, Jack Kerkhof wrote:
> The query:
> 
>     select count(*) from billing where timestamp > now()-60
> 
> should obviously use the index 
> 
>     CREATE INDEX billing_timestamp_idx ON billing USING btree
> ("timestamp" timestamp_ops);
> 
> on a table with 1400000 rows.
> 
> But it uses a Seq Scan. If I set enable_seqscan=no, it indicates a
> queryplan could not be calculated. 

Have you tried this:

marlowe=> select now()-60;
ERROR:  operator does not exist: timestamp with time zone - integer
HINT:  No operator matches the given name and argument type(s). You may
need to add explicit type casts.

you likely need:

smarlowe=> select now()-'60 seconds'::interval;
           ?column?
-------------------------------
 2004-08-29 12:25:38.249564-06

inside there.  

Also, count(*) is likely to always generate a seq scan due to the way
aggregates are implemented currently in pgsql.  you might want to try:

select somefield from sometable where timestampfield > now()-'60
seconds'::interval

and count the number of returned rows.  If there's a lot, it won't be
any faster, if there's a few, it should be a win.


In response to

Responses

pgsql-performance by date

Next:From: Steinar H. GundersonDate: 2004-08-29 18:57:50
Subject: Re: Why does a simple query not use an obvious index?
Previous:From: Mr PinkDate: 2004-08-29 18:04:48
Subject: Re: Why does a simple query not use an obvious index?

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group