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

Responder a