Segue link:
https://explain.depesz.com/s/EY6v

Em 21/09/2016 17:14, Lucas Possamai escreveu:


2016-09-22 8:00 GMT+12:00 Antonio Cesar <cgcesarsoa...@gmail.com <mailto: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


<<attachment: cgcesarsoares.vcf>>

_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a