Rodrigo se possivel crie um indice abaixo e rode o explain analyze nessa query novamente CREATE INDEX idx_leitura_estoque_produtopdvex ON leitura_estoque USING btree ( dtmovto, codemitente,codregistro ,codestabelec);
analyze leitura_estoque ; rode o explain em cima da sua query novamente []s Luiz ----- Original Message ----- From: "Rodrigo Monteiro" <[EMAIL PROTECTED]> To: "Comunidade PostgreSQL Brasileira " <[email protected]> Sent: Friday, September 26, 2008 10:15 AM Subject: Re: [pgbr-geral]Banco de dados cresce 1,3GB por mês Resultado do EXPLAIN ANALYZE: "Aggregate (cost=2411513.21..2411513.23 rows=1 width=40) (actual time=975252.776..975252.776 rows=1 loops=1)" " -> Index Scan using idx_dtmovtole on leitura_estoque (cost=0.00..2338671.14 rows=9712275 width=40) (actual time=147.812..950822.701 rows=8329310 loops=1)" " Index Cond: ((dtmovto >= '2008-01-01'::date) AND (dtmovto <= '2008-08-31'::date))" " Filter: ((codemitente = 1::numeric) AND (codregistro = 3::numeric) AND (codestabelec = 3::numeric))" "Total runtime: 975270.688 ms" Thu, 25 Sep 2008 16:40:23 -0300, André Volpato escreveu:> > > > > > > > > Rodrigo Monteiro escreveu:> type="cite">CREATE INDEX idx_leitura_estoque_produto > ON leitura_estoque > USING btree > (codemitente, codestabelec, dtmovto, codproduto); > > CREATE INDEX idx_leitura_estoque_produtopdv > ON leitura_estoque > USING btree > (codemitente, codestabelec, dtmovto, equipamento, codproduto); > > > A manha para criar índices é a seguinte: qual desses campos possui> maior > especifidade? > Qual desses campos tem mais valores distintos ? > Este(s) campo(s) devem aparecer primeiro no índice... > > No caso acima, eventualmente apenas um índice em "codemitente,> > codestabelec e dtmovto" seria suficiente. > Os demais campos o postrges iria filtrar com seq scans, se você tiver> > discos rápidos vai ficar legal. > Mas não posso ter certeza, você teria que testar. > > > > type="cite">=================================================================================> > > ABAIXO A sql query > > select sum(TotItem) as Total, sum(Quantidade * CustoContabil) as Custo,> > sum(Desconto) as Desconto > from Leitura_Estoque > where CodEmitente = 1 and CodRegistro = 3 > and DtMovto between '01/01/2008' and '31/08/2008' > and CodEstabelec = 3 > > =================================================================================> > > <- em 10 minutos e 66 segundos ----> em um IBM com 8 GB> de memória, 2 > processadores Zion: 4.2 Ghz> > Mais uma vez vou te pedir pra rodar : > EXPLAIN ANALYZE select sum(TotItem) as Total ...... > Mande o resultado pra gente! Tenho quase certeza que os índices não> estão > sendo utilizados de acordo. > Este comando vai executar a query, então aguarde 11 minutos e 6> segundos > (é isso q vc quis dizer?) > > PS: Essa query será executada em apenas um core de apenas um> > processador... > Monitore o andamento da query com o dstat, ou vmmstat. Se não tem,> > instale :) >-- > > []´s, ACV> > > > > > _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
