Bom dia a todos.

Versão: PostgreSQL 9.3.4 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit

Tenho no sistema uma função que como parâmetro é passado o ano e mês e a mesma me retorna o primeiro ou último dia do mês.

Quando faço uma busca em uma tabela sem setar a data mas utilizando as funções o PostgreSQL não utiliza os índices.

Vou postar as duas consultas e o resultado do explain:

select *
from public.stfil021_new a
where
   a.movdatmov between '01/07/2014' and '31/07/2014'

Index Scan using stfil021_new_idx1 on stfil021_new a (cost=0.56..26316.44 rows=13903 width=121) Index Cond: ((movdatmov >= '2014-07-01'::date) AND (movdatmov <= '2014-07-31'::date))

select *
from public.stfil021_new a
where
a.movdatmov between functions.sp_data(:ano,:mes,'P') and functions.sp_data(:ano,:mes,'U')

Seq Scan on stfil021_new a  (cost=0.00..21892087.82 rows=4434288 width=121)
Filter: ((movdatmov >= functions.sp_data(2014, 7, 'P'::character varying)) AND (movdatmov <= functions.sp_data(2014, 7, 'U'::character varying)))

Como faço para utilizar essas funções e ainda utilizar os índices da tabela, pois em vários casos teremos como parâmetros o ano e mês e não as datas.

Obrigado!

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a