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 |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
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.
From | Date | Subject | |
---|---|---|---|
Next Message | Steinar H. Gunderson | 2004-08-29 18:57:50 | Re: Why does a simple query not use an obvious index? |
Previous Message | Mr Pink | 2004-08-29 18:04:48 | Re: Why does a simple query not use an obvious index? |