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