Boa Tarde Senhores,
Tenho uma pequena dúvida, agradeço a atenção de todos.
Na minha query abaixo:
explain
SELECT
ccd.creditodebito,
CAST ('N' AS CHAR (1)) AS Tipo,
SUM (valor) AS Total
FROM
tabela1 ccd
WHERE
(ccd.data >= '2009-07-01') AND
(ccd.data <= '2009-07-01') AND
(ccd.cupom = 'ccpCadCli') AND
(ccd.tipo = '2')
GROUP BY ccd.creditodebito, 2
Eu tenho a seguinte saida no explain:
QUERY PLAN
HashAggregate (cost=9.16..9.17 rows=1 width=10)
-> Index Scan using caeindccd_22 on tabela1ccd (cost=0.00..9.15 rows=1
width=10)
Index Cond: ((data >= '2009-07-01'::date) AND (data <=
'2009-07-01'::date))
Filter: ((cupom = 'ccpCadCli'::bpchar) AND (tipo = '2'::bpchar))
Ou seja, a query demora nada mais do que uma consulta rápida no indice.
Porém, se eu aumentar o período para 31 dias a saída do explain fica assim:
explain
SELECT
ccd.creditodebito,
CAST ('N' AS CHAR (1)) AS Tipo,
SUM (valor) AS Total
FROM
tabela1 ccd
WHERE
(ccd.data >= '2009-07-01') AND
(ccd.data <= '2009-07-31') AND
(ccd.cupom = 'ccpCadCli') AND
(ccd.tipo = '2')
GROUP BY ccd.creditodebito, 2
QUERY PLAN
HashAggregate (cost=59747.72..59747.74 rows=1 width=10)
-> Index Scan using caeindccd_04 on tabela1ccd ccd (cost=0.00..59745.16
rows=342 width=10)
Index Cond: ((data >= '2009-07-01'::date) AND (data <=
'2009-07-31'::date) AND (cupom = 'ccpCadCli'::bpchar))
Filter: (tipo = '2'::bpchar)
Aumentou exponencialmente o custo da consulta, apesar de estar indexida.
Enfim, aonde quero chegar?
Percebi que o Postgres não lida muito bem com a performance passando grandes
períodos (pode ser que eu esteja errado), não sei como funciona em outros
bancos, mas acho isso um pouco falho no Postgres.
Para minimizar esses problemas, foi adotado junto ao setor de
Desenvolvimento, que na base de produção não seria possível sqls com
períodos superiores a 30 dias, mas mesmo assim temos caso como o de cima.
Pergunta: Existe alguma maneira de fazer uma consulta com períodos e ter uma
boa performance?
No maior período da tabela existem 20 mil registros.
Agradeço, novamente, a atenção.
Atenciosamente,
Rafael Domiciano
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral