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
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral