Se fosse firebird te recomendaria uma Store Precedure com Suspend; sempre
tive muito melhores resultados do que com os select mais complexos(que em
teoria deveriam dar o mesmo resultados, mas pelo meio temos a qualidade da
rede e a intensidade do tráfego que sempre atrapalham as nossas contas).
Como dizia, regista-se uma melhoria de performance de 1 para dez (com bases
de dados remotas).
É um pena não haver como fazer isso com o postgres. No IBM400 c/SQL400
também não tem storeprocediures c/suspend por isso  partiamos o problema
maior em problemas mais pequenos muitas fezes com select parciais escrvendo
para ficheiros de trabalho que de seguida eram usados nos query seguintes e
com óptimos resultados.
Select's um pouco mais complexos tendem a ser bastante pesados partido o
problema em pedaços mais pequenos a coisa flui com uma velocidade
considerável.
Espero ter ajudado de algum modo.

Exm.º(ª)(s) Senhor(a)s,



Com os nossos melhores cumprimentos
O Secretário Geral da ACRA
Mário Agostinho Reis
Esta mensagem contém informação de natureza confidencial e é exclusivamente
dirigida ao(s) destinatário(s) indicado(s). Se, por engano, receber este
e-mail agradecemos que não o copie nem o reenvie e que nos notifique do
ocorrido através do e-mail de resposta.

2016-09-21 20:14 GMT+00:00 Lucas Possamai <drum.lu...@gmail.com>:

>
>
> 2016-09-22 8:00 GMT+12:00 Antonio Cesar <cgcesarsoa...@gmail.com>:
>
>> Segue
>> SELECT
>>     tmp.codigo_empresa,
>>     tmp.codigo_anterior,
>>     tmp.tipo,
>>     SUM(tmp.mes01) AS quantidade_mes01,
>>     SUM(tmp.mes02) AS quantidade_mes02,
>>     SUM(tmp.mes03) AS quantidade_mes03,
>>     SUM(tmp.mes04) AS quantidade_mes04,
>>     SUM(tmp.mes05) AS quantidade_mes05,
>>     SUM(tmp.mes06) AS quantidade_mes06,
>>     SUM(tmp.mes07) AS quantidade_mes07,
>>     SUM(tmp.mes08) AS quantidade_mes08,
>>     SUM(tmp.mes09) AS quantidade_mes09,
>>     SUM(tmp.mes10) AS quantidade_mes10,
>>     SUM(tmp.mes11) AS quantidade_mes11,
>>     SUM(tmp.mes12) AS quantidade_mes12
>> FROM
>>     (SELECT
>>         its.codigo_empresa,
>>         ite.codigo_anterior,
>>         CAST('Saídas' AS CHAR(15)) AS tipo,
>>         SUM(CASE WHEN its.mes_ref = '102015' THEN (its.quantidade_saida /
>> un.quantidade) ELSE 0 END) AS mes01,
>>         SUM(CASE WHEN its.mes_ref = '112015' THEN (its.quantidade_saida /
>> un.quantidade) ELSE 0 END) AS mes02,
>>         SUM(CASE WHEN its.mes_ref = '122015' THEN (its.quantidade_saida /
>> un.quantidade) ELSE 0 END) AS mes03,
>>         SUM(CASE WHEN its.mes_ref = '012016' THEN (its.quantidade_saida /
>> un.quantidade) ELSE 0 END) AS mes04,
>>         SUM(CASE WHEN its.mes_ref = '022016' THEN (its.quantidade_saida /
>> un.quantidade) ELSE 0 END) AS mes05,
>>         SUM(CASE WHEN its.mes_ref = '032016' THEN (its.quantidade_saida /
>> un.quantidade) ELSE 0 END) AS mes06,
>>         SUM(CASE WHEN its.mes_ref = '042016' THEN (its.quantidade_saida /
>> un.quantidade) ELSE 0 END) AS mes07,
>>         SUM(CASE WHEN its.mes_ref = '052016' THEN (its.quantidade_saida /
>> un.quantidade) ELSE 0 END) AS mes08,
>>         SUM(CASE WHEN its.mes_ref = '062016' THEN (its.quantidade_saida /
>> un.quantidade) ELSE 0 END) AS mes09,
>>         SUM(CASE WHEN its.mes_ref = '072016' THEN (its.quantidade_saida /
>> un.quantidade) ELSE 0 END) AS mes10,
>>         SUM(CASE WHEN its.mes_ref = '082016' THEN (its.quantidade_saida /
>> un.quantidade) ELSE 0 END) AS mes11,
>>         SUM(CASE WHEN its.mes_ref = '092016' THEN (its.quantidade_saida /
>> un.quantidade) ELSE 0 END) AS mes12
>>     FROM
>>         ((item_mensal its
>>         INNER JOIN item ite ON its.codigo_item = ite.codigo)
>>         INNER JOIN unidade un ON ite.codigo_unidade = un.codigo)
>>     WHERE
>>         its.ano_ref >= '2015-10-01' AND
>>         its.ano_ref <= '2016-09-30' AND
>>         its.codigo_item = 10016528
>>     GROUP BY
>>         "tipo",
>>         its.codigo_empresa,
>>         ite.codigo_anterior
>>     UNION ALL
>>     SELECT
>>         its.codigo_empresa,
>>         ite.codigo_anterior,
>>         CAST('Entradas' AS CHAR(15)) AS tipo,
>>         SUM(CASE WHEN its.mes_ref = '102015' THEN (its.quantidade_entrada
>> / un.quantidade) ELSE 0 END) AS mes01,
>>         SUM(CASE WHEN its.mes_ref = '112015' THEN (its.quantidade_entrada
>> / un.quantidade) ELSE 0 END) AS mes02,
>>         SUM(CASE WHEN its.mes_ref = '122015' THEN (its.quantidade_entrada
>> / un.quantidade) ELSE 0 END) AS mes03,
>>         SUM(CASE WHEN its.mes_ref = '012016' THEN (its.quantidade_entrada
>> / un.quantidade) ELSE 0 END) AS mes04,
>>         SUM(CASE WHEN its.mes_ref = '022016' THEN (its.quantidade_entrada
>> / un.quantidade) ELSE 0 END) AS mes05,
>>         SUM(CASE WHEN its.mes_ref = '032016' THEN (its.quantidade_entrada
>> / un.quantidade) ELSE 0 END) AS mes06,
>>         SUM(CASE WHEN its.mes_ref = '042016' THEN (its.quantidade_entrada
>> / un.quantidade) ELSE 0 END) AS mes07,
>>         SUM(CASE WHEN its.mes_ref = '052016' THEN (its.quantidade_entrada
>> / un.quantidade) ELSE 0 END) AS mes08,
>>         SUM(CASE WHEN its.mes_ref = '062016' THEN (its.quantidade_entrada
>> / un.quantidade) ELSE 0 END) AS mes09,
>>         SUM(CASE WHEN its.mes_ref = '072016' THEN (its.quantidade_entrada
>> / un.quantidade) ELSE 0 END) AS mes10,
>>         SUM(CASE WHEN its.mes_ref = '082016' THEN (its.quantidade_entrada
>> / un.quantidade) ELSE 0 END) AS mes11,
>>         SUM(CASE WHEN its.mes_ref = '092016' THEN (its.quantidade_entrada
>> / un.quantidade) ELSE 0 END) AS mes12
>>     FROM
>>         ((item_mensal its
>>         INNER JOIN item ite ON its.codigo_item = ite.codigo)
>>         INNER JOIN unidade un ON ite.codigo_unidade = un.codigo)
>>     WHERE
>>         its.ano_ref >= '2015-10-01' AND
>>         its.ano_ref <= '2016-09-30' AND
>>         its.codigo_item = 10016528
>>     GROUP BY
>>       "tipo",
>>       its.codigo_empresa,
>>       ite.codigo_anterior) tmp
>>     GROUP BY
>>       tmp.tipo,
>>       tmp.codigo_empresa,
>>       tmp.codigo_anterior
>>     ORDER BY
>>       tmp.tipo,
>>       tmp.codigo_empresa
>>
>> Em 21/09/2016 16:57, Euler Taveira escreveu:
>>
>>> On 21-09-2016 16:32, Antonio Cesar wrote:
>>>
>>>> Estou montado esse select e esta muito lento, alguem pode me ajudar?
>>>>
>>>> EXPLAIN ANALYZE. Cadê a consulta?
>>>
>>>
>>>
>>
>>
>
> Execute sua query com Explain analyze... https://www.
> postgresql.org/docs/current/static/sql-explain.html
>
>
> explain analyze SELECT * FROM test;
>
>
>
> Poste o resultado aqui (Melhor de visualizar): http://explain.depesz.com/
>
> e nos mande o link
>
> Lucas
>
>
> _______________________________________________
> 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