Em 15 de janeiro de 2013 10:37, Flavio Yamil Gómez
<fla...@metavirtual.com.br> 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.

[... corte ...]

> 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;


O 'UNION' garante que não existirão linhas duplicadas no seu
resultado, isto faz com que ele ordene os dados para fazer um DISTINCT
implícito, verifique no resultado do EXPLAIN se este é um passo
custoso ou se você tem algum custo em um outro ponto específico, o
qual pode necessitar de um índice, talvez. Além disto a massa de dados
retornada pela VIEW pode gerar impacto no momento do 'LEFT JOIN' tendo
em vista que primeiro é necessário saber se na VIEW existe um registro
que case com a condição e isto pode levar a um escaneamento da VIEW
inteira.

Veja o plano de execução, conforme o colega já informou em email
anterior, mas se não conseguir visualizar os pontos de gargalo tente
utilizar uma ferramenta como o explain do site do depesz [1] para
avaliar isto de forma um pouco mais visual.

[1] http://explain.depesz.com/
-- 
Dickson S. Guedes
mail/xmpp: gue...@guedesoft.net - skype: guediz
http://guedesoft.net - http://www.postgresql.org.br
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a