Otimizar entre a data e a declaração

Preciso de ajuda para otimizar uma consulta do PostgreSQL que usa oBETWEEN cláusula com umtimestamp campo.

Eu tenho 2 mesas:

ONE(int id_one(PK), datetime cut_time, int f1 . . .) 

contendo cerca de 3394 linhas

TWO(int id_two(PK), int id_one(FK), int f2 . . .) 

contendo cerca de 4000000 linhas

Existem índices btree em ambos os PKsid_one eid_two, no FKid_one ecut_time.

Eu quero realizar uma consulta como:

select o.id_one, Date(o.cut_time), o.f1, t.f2 
from one o
inner join two t ON (o.id_one = t.id_one)
where o.cut_time between '2013-01-01' and '2013-01-31';

Esta consulta recupera cerca de 1.700.000 linhas em cerca de 7 segundos.

Abaixo, o relatório de análise de explicação é relatado:

"Merge Join  (cost=20000000003.53..20000197562.38 rows=1680916 width=24) (actual time=0.017..741.718 rows=1692345 loops=1)"
"  Merge Cond: (c.coilid = hf.coilid)"
"  ->  Index Scan using pk_coils on coils c  (cost=10000000000.00..10000000382.13 rows=1420 width=16) (actual time=0.008..4.539 rows=1404 loops=1)"
"        Filter: ((cut_time >= '2013-01-01 00:00:00'::timestamp without time zone) AND (cut_time <= '2013-01-31 00:00:00'::timestamp without time zone))"
"        Rows Removed by Filter: 1990"
"  ->  Index Scan using idx_fk_lf_data on hf_data hf  (cost=10000000000.00..10000166145.90 rows=4017625 width=16) (actual time=0.003..392.535 rows=1963386 loops=1)"
"Total runtime: 768.473 ms"

O índice na coluna de registro de data e hora não é usado. Como otimizar esta consulta?

questionAnswers(2)

yourAnswerToTheQuestion