Select on timestamp-day slower than timestamp alone

From: Reiner Dassing <dassing(at)wettzell(dot)ifag(dot)de>
To: pgsql-performance(at)postgresql(dot)org
Subject: Select on timestamp-day slower than timestamp alone
Date: 2003-05-06 06:59:43
Message-ID: 3EB75D5F.5080406@wettzell.ifag.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

Hello all!

On PostgreSQL V7.3.2 on TRU64 I recognized the following phenomena
that a SELECT using a difference of a timestamp and an interval
in the WHERE clause does not use the index
but using a timestamp without a difference does use the index.
The semantic of both SELECT's is equal, i.e., the result is equal.

Therefore, the second way is much faster.

Any ideas?

In detail:
table:

wetter=# \d wetter
Table "public.wetter"
Column | Type | Modifiers
-----------+--------------------------+-----------
sensor_id | integer | not null
epoche | timestamp with time zone | not null
wert | real | not null
Indexes: wetter_pkey primary key btree (sensor_id, epoche),
wetter_epoche_idx btree (epoche),
wetter_sensor_id_idx btree (sensor_id)
Triggers: RI_ConstraintTrigger_45702811,
t_ins_wetter_wetterakt

Select not using index:
-----------------------
wetter=# explain select * from wetter where epoche between
'2003-05-06 06:50:54+00'::timestamp-'1 days'::interval
AND '2003-05-06 04:45:36';

QUERY PLAN

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Seq Scan on wetter (cost=0.00..768644.57 rows=10253528 width=16)
Filter: ((epoche >= ('2003-05-05 06:50:54'::timestamp without time
zone)::timestamp with time zone) AND (epoche <= '2003-05-06
04:45:36+00'::timestamp with time zone))
(2 rows)

wetter=#

Select using the index:
-----------------------
explain select * from wetter where epoche between '2003-05-05 06:50:54'
AND '2003-05-06 04:45:36';

QUERY PLAN

---------------------------------------------------------------------------------------------------------------------------------------------------
Index Scan using wetter_epoche_idx on wetter (cost=0.00..5.45 rows=1
width=16)
Index Cond: ((epoche >= '2003-05-05 06:50:54+00'::timestamp with
time zone) AND (epoche <= '2003-05-06 04:45:36+00'::timestamp with time
zone))
(2 rows)

wetter=#

--

Mit freundlichen Gruessen / With best regards
Reiner Dassing

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Peter Childs 2003-05-06 07:25:45 Re: [HACKERS] Hypothetical suggestions for planner, indexing
Previous Message Tom Lane 2003-05-06 04:45:30 Re: Hypothetical suggestions for planner, indexing improvement