From: | Stephan Szabo <sszabo(at)megazone23(dot)bigpanda(dot)com> |
---|---|
To: | Jean-Christophe Boggio <cat(at)thefreecat(dot)org> |
Cc: | <pgsql-sql(at)postgresql(dot)org> |
Subject: | Re: Optimization with dates |
Date: | 2001-11-14 00:17:06 |
Message-ID: | 20011113161522.F89792-100000@megazone23.bigpanda.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
On Wed, 14 Nov 2001, Jean-Christophe Boggio wrote:
> Hello,
>
> I really have a problem dealing with dates :
>
> I have a big table (~10M rows) like :
>
> create table gains (
> dategain timestamp,
> otherfields
> );
>
> There's an index on dategain and I want to use it to get the last
> 30 days records :
>
> explain select count(*) from gains where dategain>=now()-30;
>
> Aggregate (cost=256546.78..256546.78 rows=1 width=0)
> -> Seq Scan on gains (cost=0.00..250627.68 rows=2367640 width=0)
>
> whereas :
>
> explain select count(*) from gains where dategain>='now';
>
> Aggregate (cost=27338.47..27338.47 rows=1 width=0)
> -> Index Scan using ix_gains_dategain on gains (cost=0.00..27320.71 rows=7103 width=0)
>
> I have tried :
> where dategain>=(select now()-30);
> where dategain+30>='now'
> where date(dategain)>=date('now')-30
> and many other, syntactically absurd :-)
>
> Anyone can help me use this index ?
Is 2367640 a reasonable estimate for the number of
rows that match the condition? Have you run vacuum
analyze?
If the estimate is right, you'll probably find that
the sequence scan is actually faster than an index
scan since about 1/4 of the table is being selected.
From | Date | Subject | |
---|---|---|---|
Next Message | Josh Berkus | 2001-11-14 00:19:13 | Re: Optimization with dates |
Previous Message | Jean-Christophe Boggio | 2001-11-13 23:56:56 | Optimization with dates |