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