analyse "NotaFiscal" explain analyse select sum(case when "NotaItem"."TipoOperacaoItem"='S' and "Operacao"."TipoOperacoes" = 'V' then "NotaItem"."QuantidadeItem" else 0 end) as QtdeSaidaVenda, sum(case when "NotaItem"."TipoOperacaoItem"='S' and "Operacao"."TipoOperacoes" = 'T' then "NotaItem"."QuantidadeItem" else 0 end) as QtdeSaidaTransferencia, sum(case when "NotaItem"."TipoOperacaoItem"='S' and "Operacao"."TipoOperacoes" = 'D' then "NotaItem"."QuantidadeItem" else 0 end) as QtdeSaidaDevolucao, sum(case when "NotaItem"."TipoOperacaoItem"='S' and "Operacao"."TipoOperacoes" = 'O' then "NotaItem"."QuantidadeItem" else 0 end) as QtdeSaidaOutros, sum(case when "NotaItem"."TipoOperacaoItem"='E' and "Operacao"."TipoOperacoes" = 'C' then "NotaItem"."QuantidadeItem" else 0 end) as QtdeEntradaCompra, sum(case when "NotaItem"."TipoOperacaoItem"='E' and "Operacao"."TipoOperacoes" = 'T' then "NotaItem"."QuantidadeItem" else 0 end) as QtdeEntradaTransferencia, sum(case when "NotaItem"."TipoOperacaoItem"='E' and "Operacao"."TipoOperacoes" = 'D' then "NotaItem"."QuantidadeItem" else 0 end) as QtdeEntradaDevolucao, sum(case when "NotaItem"."TipoOperacaoItem"='E' and "Operacao"."TipoOperacoes" = 'O' then "NotaItem"."QuantidadeItem" else 0 end) as QtdeEntradaOutros,
sum(case when "NotaItem"."TipoOperacaoItem"='S' and "Operacao"."TipoOperacoes" = 'V' then "NotaItem"."ValorTotalItem" else 0 end) as TotalSaidaVenda, sum(case when "NotaItem"."TipoOperacaoItem"='S' and "Operacao"."TipoOperacoes" = 'T' then "NotaItem"."ValorTotalItem" else 0 end) as TotalSaidaTransferencia, sum(case when "NotaItem"."TipoOperacaoItem"='S' and "Operacao"."TipoOperacoes" = 'D' then "NotaItem"."ValorTotalItem" else 0 end) as TotalSaidaDevolucao, sum(case when "NotaItem"."TipoOperacaoItem"='S' and "Operacao"."TipoOperacoes" = 'O' then "NotaItem"."ValorTotalItem" else 0 end) as TotalSaidaOutros, sum(case when "NotaItem"."TipoOperacaoItem"='E' and "Operacao"."TipoOperacoes" = 'C' then "NotaItem"."ValorTotalItem" else 0 end) as TotalEntradaCompra, sum(case when "NotaItem"."TipoOperacaoItem"='E' and "Operacao"."TipoOperacoes" = 'T' then "NotaItem"."ValorTotalItem" else 0 end) as TotalEntradaTransferencia, sum(case when "NotaItem"."TipoOperacaoItem"='E' and "Operacao"."TipoOperacoes" = 'D' then "NotaItem"."ValorTotalItem" else 0 end) as TotalEntradaDevolucao, sum(case when "NotaItem"."TipoOperacaoItem"='E' and "Operacao"."TipoOperacoes" = 'O' then "NotaItem"."ValorTotalItem" else 0 end) as TotalEntradaOutros FROM "NotaItem" left join "NotaFiscal" on "CodigoNotaItem" = "CodigoInternoNota" left join "Operacao" on "CodigoOperacaoEstoqueNota" = "CodigoInternoOperacoes" WHERE "NotaItem"."CodigoEmpresaItem"=77222 AND "NotaItem"."CodigoProdutoItem"=27149 AND "NotaItem"."DataMovimentoItem" between Cast('2013-12-01' as date) and Cast('2013-12-31' as date) * --and to_char("NotaItem"."DataMovimentoItem",'mmyyyy')=to_char($2,'mmyyyy') - Esta linha eu alterei, utilizando a linha de cima. Com isto, o planejador usou índice.* AND "NotaItem"."SituacaoNotaItem" Is Null AND "NotaFiscal"."CodigoNotaMatrizNota" is Null Marcos André G.A Trabin Softwarre & Consulting - www.trabin.com.br *Blog:* http://lgerardlucas.blogspot.com/ *twitter:* http://twitter.com/lgerardlucas Em 31 de janeiro de 2014 10:51, Fabrízio de Royes Mello < fabri...@timbira.com.br> escreveu: > On 31-01-2014 10:16, Marcos - GMail wrote: > >> mesma coisa. Eu vou rescreve esta consulta alterando a forma de buscar >> as informações, utilizando plpgsql e buscando por parte os dados >> retornando as mesmas informações. O certo, é que temos que mudar a >> versão do banco e pra isto, vai demorar mais uns meses. >> >> > Não faça isso, SQL é declarativo justamente para que você não se preocupe > em "como" os dados serão processados e retornados, e sim apenas em "o que" > vc precisa retornar. > > Geralmente fazer isso que você propõe pode ser mais problemático do que > rever o seu SQL (alias vi não o enviou para que pudessemos ajudar) e também > seus índices. > > > "Aggregate (cost=21.88..21.97 rows=1 width=42) (actual >> time=0.719..0.719 rows=1 loops=1)" >> " -> Nested Loop Left Join (cost=0.00..21.80 rows=1 width=42) (actual >> time=0.055..0.455 rows=25 loops=1)" >> " -> Nested Loop Left Join (cost=0.00..19.52 rows=1 width=41) >> (actual time=0.050..0.326 rows=25 loops=1)" >> *" Filter: ("NotaFiscal"."CodigoNotaMatrizNota" IS NULL)"* >> " -> Index Scan using >> "NotaItem_Empresa_Produto_Data_Situacao_I" on "NotaItem" >> (cost=0.00..10.89 rows=1 width=41) (actual time=0.036..0.087 rows=25 >> loops=1)" >> " Index Cond: (("CodigoEmpresaItem" = 77222) AND >> ("CodigoProdutoItem" = 27149) AND ("DataMovimentoItem" >= >> '2013-12-01'::date) AND ("DataMovimentoItem" <= '2013-12-31'::date))" >> " Filter: ("SituacaoNotaItem" IS NULL)" >> " -> Index Scan using "NotaFiscal_CodigoInterno_PK" on >> "NotaFiscal" (cost=0.00..8.62 rows=1 width=12) (actual >> time=0.006..0.007 rows=1 loops=25)" >> " Index Cond: ("NotaItem"."CodigoNotaItem" = >> "NotaFiscal"."CodigoInternoNota")" >> " -> Index Scan using "Operacao_CodigoInterno_PK" on "Operacao" >> (cost=0.00..2.27 rows=1 width=9) (actual time=0.002..0.003 rows=1 >> loops=25)" >> " Index Cond: ("NotaFiscal"."CodigoOperacaoEstoqueNota" = >> "Operacao"."CodigoInternoOperacoes")" >> "Total runtime: 0.960 ms" >> >> > Enviar sua query "nos ajudaria a te ajudar" !!! > > Att, > > -- > Fabrízio de Royes Mello Timbira - http://www.timbira.com.br/ > PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento > _______________________________________________ > pgbr-geral mailing list > pgbr-geral@listas.postgresql.org.br > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral >
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral