>  Qdo uso o to_date o indice não é usado tem alguma outra forma de
>  formatar a data e a consulta usar o indice ?
Você deve criar um índice usando a função (** Desde que esta seja IMMUTABLE)

trisso=> CREATE INDEX idx_foo_dt_to_date ON foo (TO_DATE(dt::text,'YYYYMMDD'));
ERRO:  funções em expressão de índice devem ser IMMUTABLE

A date_part não é immutable, pois depende de configurações de LOCALE
(Runtime)...

Você poderia usar a date, e alterar a comparação para o formata de data :

trisso=> create INDEX idx_foo_dt_to_date ON foo (DATE(dt));
CREATE INDEX
trisso=> EXPLAIN ANALYZE SELECT * FROM foo WHERE date(dt) between
'2008-01-01'::date AND '2008-12-31'::date;
                                                          QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------
 Bitmap Heap Scan on foo  (cost=4.32..13.83 rows=6 width=44) (actual
time=0.231..0.802 rows=1000 loops=1)
   Recheck Cond: ((date(dt) >= '2008-01-01'::date) AND (date(dt) <=
'2008-12-31'::date))
   ->  Bitmap Index Scan on idx_foo_dt_to_date  (cost=0.00..4.32
rows=6 width=0) (actual time=0.195..0.195 rows=1000 loops=1)
         Index Cond: ((date(dt) >= '2008-01-01'::date) AND (date(dt)
<= '2008-12-31'::date))
 Total runtime: 1.195 ms
(5 registros)

-- 
Att:
Thiago Risso
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a