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
