Re: Fastest way / best practice to calculate "next birthdays"

From: Shane Ambler <pgsql(at)Sheeky(dot)Biz>
To: Hannes Dorbath <light(at)theendofthetunnel(dot)de>
Cc: "Joshua D(dot) Drake" <jd(at)commandprompt(dot)com>, pgsql-performance(at)postgresql(dot)org
Subject: Re: Fastest way / best practice to calculate "next birthdays"
Date: 2008-05-05 05:41:38
Message-ID: 481E9E12.8070208@Sheeky.Biz
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

Hannes Dorbath wrote:

> Sorry, I think I phrased the question badly. What I'm after basically is:
>
> http://www.depesz.com/index.php/2007/10/26/who-has-birthday-tomorrow/
>

OK So what I came up with is - (the times are from a G4 1.25Ghz)

CREATE TABLE birthdaytest
(
id serial PRIMARY KEY,
birthdate date
);

CREATE INDEX idx_bday_month ON birthdaytest
USING btree(extract(month from birthdate));

CREATE INDEX idx_bday_day ON birthdaytest
USING btree(extract(day from birthdate));

insert into birthdaytest (birthdate) values
('1930-01-01'::date+generate_series(0,365*70));

... I repeated this another 15 times to load some data

vacuum analyse birthdaytest;

\timing

select count(*) from birthdaytest;

> count
> --------
> 408816
> (1 row)
>
> Time: 233.501 ms

select * from birthdaytest
where extract(month from birthdate) = 5
and extract(day from birthdate) between 6 and 12;

> id | birthdate
> --------+------------
> 126 | 1930-05-06
> 127 | 1930-05-07
> 128 | 1930-05-08
> ...
> ...
> 408613 | 1999-05-11
> 408614 | 1999-05-12
> (7840 rows)
>
> Time: 211.237 ms

select * from birthdaytest
where extract(month from birthdate) = extract(month from current_date)
and extract(day from birthdate) between extract(day from current_date)
and extract(day from current_date+14);

> id | birthdate
> --------+------------
> 125 | 1930-05-05
> 126 | 1930-05-06
> 127 | 1930-05-07
> ...
> ...
> 408619 | 1999-05-17
> 408620 | 1999-05-18
> 408621 | 1999-05-19
> (16800 rows)
>
> Time: 483.915 ms

--

Shane Ambler
pgSQL (at) Sheeky (dot) Biz

Get Sheeky @ http://Sheeky.Biz

In response to

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Mario Weilguni 2008-05-05 11:30:28 Re: Very slow INFORMATION_SCHEMA
Previous Message Zoltan Boszormenyi 2008-05-04 19:05:21 Re: Fastest way / best practice to calculate "next birthdays"