Já executou o Explain para ver qual o gargalo? poderia reproduzir a
estrutura de modo simplificado? somente informando a estrutura do "select"
não diz muita coisa para te ajudar
já que não sebemos a estrutura das tabelas.


Em 15 de janeiro de 2013 09:37, Flavio Yamil Gómez <
[email protected]> escreveu:

> Olá pessoal,
>
> Criei uma VIEW com três SELECTS usando o UNION.
>
> Quando executo um select na view, está demorando 5 segundos para retornar
> o resultado. Porém, executando os selects por separado, cada um demora 15ms
> em média.
>
> Detalhe: uma das tabelas contém 2,6 milhões de registros e possui os
> devidos índices criados.
> A instalação do postgres 9.1 é a padrão. Alguém poderia me dar alguma dica
> para melhorar esse desempenho?
>
> Outro detalhe importante:
>
> Ao chamar a consulta da view, quando comparo com um valor "colocado na
> mão" o retorno é instantâneo, porém quando comparo com um campo da tabela,
> daí demora. Vejam o código chamador:
>
> select com_oferta.nr_oferta
> from com_oferta
>
>  left join com_trafego on com_trafego.cd_oferta = com_oferta.cd_oferta
>  left join pro_produto on com_oferta.cd_produto = pro_produto.cd_produto
>  left join vw_loc_origem_destino2 on vw_loc_origem_destino2.cd_codigo =
> com_trafego.cd_origem_carga --> Este é o comando problemático.
> --> Se eu comparar com um valor explícito, funciona rápido (= 3 por
> exemplo).
>
> where
>      com_oferta.cd_produto = 1
>
>
>
>
>
> Segue código da view:
>
> CREATE OR REPLACE VIEW bs_dvm.vw_loc_origem_destino2 AS
>
>         ( SELECT loc_cidade.cd_cidade AS cd_codigo,
>                            loc_cidade.nm_cidade::text as nm_nome,
>                            loc_cidade.cd_pais, loc_cidade.cd_regiao, 3 AS
> tp_tipo
>                 FROM bs_dvm.loc_cidade
>                 LEFT JOIN bs_dvm.loc_regiao ON loc_cidade.cd_regiao =
> loc_regiao.cd_regiao
>                 LEFT JOIN bs_dvm.loc_pais ON loc_cidade.cd_pais =
> loc_pais.cd_pais
>
>         UNION
>
>                 SELECT loc_porto.cd_porto AS cd_codigo,
>                            loc_porto.nm_porto::text AS nm_nome,
>                            loc_porto.cd_pais, 0 AS cd_regiao, 2 AS tp_tipo
>                 FROM bs_dvm.loc_porto
>         );
>
> ALTER TABLE bs_dvm.vw_loc_origem_destino
>   OWNER TO postgres;
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>


-- 
Anselmo M. Silva
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a