As tabelas são estas:<br>cadastros<br>=&gt; tem o cadastro unico da pessoa em si. Nela tem a data de nascimento, nome, etc...<br>emails<br>=&gt; tem os e-mails, relacionada com a cadastro, 1 ou mais e-mail por id_cadastro<br>

enderecos<br>=&gt; tem os enderecos, mesma regra do email<br>telefones<br>=&gt; tem os telefones, mesma regra do e-mail<br><br>Tabem temos uma tabela de log para cada uma dessas: cadastros_ids, emails_ids, enderecos_ids e telefones_ids.<br>

Quando um dedup é gerado (quando duas ou mais pessoas viram uma) é adiciona um log na cadastros_updated.<br><br>Quando duas pessoas ou mais viram uma, se faz:<br><br>Gera uma nova chave de id_cadastro,<br>pega todos os endereços/emails/telefone/data de nascimento do registro mais recente não nula e insere num novo cadastro.<br>

Na cadastros, tem o campo id_cadastros_pai,<br>ele, por padrão, é o proprio id_cadastros, quando ocorre um dedup, ele vira o id_cadastro do pai dele, pois precisamos saber quem virou quem.<br><br>Todas estas tabelas são alimentadas pela tabela tmp.tb_importa_contato_clean, <br>

Penso em separar esta tabela por arquivo recebido, pois já contém 8 milhoes nela, e só é necessário os registros do arquivo que esta sendo processado.<br><br>Então vamos la, fazer insert dos telefones novos.<br><br>SELECT <br>

    nextval(&#39;telefones_id_telefone_seq&#39;) as id_telefone,<br><br>    cad.id_cadastro,<br>    icc.ident_id,<br>    <a href="http://icc.id">icc.id</a>,<br>    icc.id_origem,<br><br>        icc.dm_areacode,<br>        icc.dm_phone, -- tel_numero<br>

<br>        icc.tel_compl,<br>        icc.dm_matchphone,<br>        icc.dm_phone, -- dm_phone<br>        icc.dm_areacode <br>FROM <br>       tmp.tb_importa_contato_clean icc<br>INNER JOIN cadastros cad  ON (cad.id_feed = <a href="http://icc.id">icc.id</a> )<br>

LEFT  JOIN telefones tel  ON (tel.dm_matchphone = icc.dm_matchphone)<br>    <br>WHERE <br>    tel.id_telefone IS NULL<br>AND     COALESCE(icc.dm_phone, &#39;&#39;) != &#39;&#39;<br><br><br>Sim, é possivel.<br>Não sei se vai ser mais rápido, mas vou testar, afinal, como já me disseram, o banco tem indexe pra que?!<br>

<br>A query do insert de cadastros é a mais chata, pois vai ter que ter alguns OR, OR, OR...<br><br><br>Como sábado eu vou sair meio-dia, eu vou fazer os testes das queries durante a manhã, ok? ai deixo o perl pra depois.<br>

<br><br><br><div class="gmail_quote">2010/9/30 Frederico Recsky <span dir="ltr">&lt;<a href="mailto:listas@imovlr.com">listas@imovlr.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

Olá,<br>
<div class="im"><br>
2010/9/29 Renato Santos &lt;<a href="mailto:renato.cron@gmail.com">renato.cron@gmail.com</a>&gt;:<br>
</div><div class="im">&gt; Tem mais coisas<br>
&gt; Sei q com esforco da pra virar 1 query. Mas vai ficar muito complexa.cheia<br>
&gt; de replace, etc.<br>
<br>
</div>Banco de dados não é meu forte, mas você pode formatar uma query e<br>
deixar ela num nivel que fica bom de manter.<br>
<div class="im"><br>
insert into<br>
       dedup (id, email, foo, bar)<br>
select<br>
       min(id)<br>
     , email<br>
     , min(foo)<br>
     , min(bar)<br>
from<br>
     dup<br>
group by<br>
     email<br>
<br>
</div>Mesmo se for um terrível replace, join, delete, alter table tudo junto<br>
fica razoável.  Eu pessoalmente não domino nem um pouco SQL mas<br>
queries assim fica facil de entender.<br>
<br>
Ainda mais se voce pensar que essa query é um batch sequencial, vai<br>
funcionar como script.<br>
<br>
[]&#39;s<br>
<font color="#888888"><br>
Frederico<br>
</font><div><div></div><div class="h5">_______________________________________________<br>
SaoPaulo-pm mailing list<br>
<a href="mailto:SaoPaulo-pm@pm.org">SaoPaulo-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/saopaulo-pm" target="_blank">http://mail.pm.org/mailman/listinfo/saopaulo-pm</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Renato Santos<br><a href="http://www.renatocron.com/blog/" target="_blank">http://www.renatocron.com/blog/</a><br>