Pessoal
Tenho a seguinte duvida sobre um join entre duas tabelas.A tabela a possui aproximadamente 400.000 mil registros ao passo que a tabela b possui 20 milhoes de regitros, Os campos de juncao ambos sao pk e os campos do where possuem indices, porem verifico atraves do explain a montagem da estrutura hash esta muito custosa. Seria um problema do sql mal feito ou alguma dificuldade em alocar na memoria este hash table?.Segue o sql com o explain. select a.cnpj as cnpj_atual, cdmatriz_changed , data_abertura_changed, razao_social_changed , fantasia_changed, cdnatureza_changed, logradouro_changed, numero_changed, complemento_changed, cep_changed, bairro_changed, municipio_changed, uf_changed, cdsitcadastral_changed, cdmotivosituacao_changed, cdsitcadastralesp_changed, cnaes_changed, a.datahora_processamento as datahora_processamento_atual, b.datahora_processamento as datahora_processamento_rela, a.data_situacao as data_situcao_atual, b.data_situacao as data_situcao_rela, ramo_atividade, cod_ramo1, cod_ramo2, cod_ramo3, cod_ramo4, cod_ramo5, cod_ramo6, cod_ramo7, cod_ramo8, cod_ramo9, cod_ramo10, id from novo_cnpj_cnae.ecnpj_teste_repro a INNER join novo_cnpj_cnae.cnpj_rf b ON a.cnpj=b.cnpj where id > 1*10000 and id <= (1*10000 + 10000) and a.flag_relacional=0 "Hash Join (cost=2328.53..820035.33 rows=9582 width=143)" " Hash Cond: ((b.cnpj)::bpchar = a.cnpj)" " -> Seq Scan on cnpj_rf b (cost=0.00..555596.78 rows=19055578 width=27)" " -> Hash (cost=2208.76..2208.76 rows=9582 width=131)" " -> Index Scan using idx_ecnpj_teste_repro_id_2 on ecnpj_teste_repro a (cost=0.00..2208.76 rows=9582 width=131)" " Index Cond: ((id > 10000) AND (id <= 20000))" " Filter: ((flag_processamento = 22) AND (flag_relacional = 0))"
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral