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

Responder a