[firebase-br] Ajuda com INNER JOIN....

Eduardo Bahiense eduardo em icontroller.com.br
Qui Jan 31 11:20:02 -03 2008


Olá Pablo

Ao que parece, a lentidão do seu processo deve-se não ao FB mas à sua 
lógica interna baseada em locates que são operações normalmente lentas.
Pelo o que você relata você tem uma redundância de informações nesse 
campo data. Se a chave da NF em REG50 contém a data, esta não deveria 
estar repetida em REG54. Claro, às vezes, por questões de performance ou 
agilidade, nos permitimos um pouco de redundância.
No caso deste seu processo, vou dar uma sugestão para tentar otimizar.

Receba os dados de REG54 sem a data. Isso vai causar a gravação no BD 
com DATA=NULL.
Após todo o processo, execute uma query assim:
UPDATE REG54 A SET DATA=(SELECT DATA FROM REG50 WHERE NF=A.NF) WHERE 
A.DATA IS NULL

Isso atualizará REG54 com os valores de REG50, porém, observe o seguinte:
Se seu arquivo REG54 contém muitos registros este processo poderá ser 
lento. Para melhorar a performance, crie um índice no campo DATA.

Espero ter te ajudado

Abs,

Eduardo

Pablo Gonçalves Bragança escreveu:
> Bom dia Felipe.
> Meu problema é o seguinte:
> Tenho duas tabelas onde são armazenadas as informações da nota fiscal; REG50
> e REG54.
> Na tabela REG50 são armazenadas as informações referentes à capa da nota ou
> cabeçalho como preferir. Na tabela REG54 são armazenadas as informações
> referentes ao intens e valores que compõem a nota fiscal.
> Nas duas tabelas eu tenho um campo chamado DATA. Se eu tenho uma nota de
> número 000001 na REG50 e a DATA dela é 01.01.2008 e tenho 4 itens
> que completam a nota, na REG54 eu vou ter 4 registros de numero igual a
> 000001 com este mesmo campo DATA de valor 01.01.2008.
> Porém, minhas tabelas são alimentadas por arquivos TXT e os registros que
> alimentam a REG54 não vem com DATA. Somente a REG50 vem. Logo, fiz apenas um
> locate depois de alimentada a REG50, procurar tal DATA nela e alimentar a
> REG54. Só que isso estava fazendo meu sistema ficar lento. E muito.
> Utilizei então de relacionamento de datalookup, onde eu apenas mostro a
> mesma data qdo pesquiso uma NF qq. Porém tenho mais de 400.000 registros de
> NF hj e a tendência é aumentar esse número.
> Foi onde chegamos hj. Usei um select INNER JOIN para juntar as duas tabelas
> com campos iguais e o que precisava fazer era somente pegar a DATA
> armazenada na REG50 e atualizar na REG54. Só que não consegui e é o ponto
> onde vcs da lista têm me ajudado.
> Acho que ficou um texto grande... rsrsrs.... Mas é onde estu hj. Refazendo
> meu relacionamento para ver se acho outra maneira de agilizar esta rotina ou
> não precisar fazer esta rotina.
> Se tiver alguma luz aí me fala....
> 
>  --
>  *****************************
>  Att,
>  Pablo Bragança
>  Programador
>  Adm. Redes de Comp.
>  *****************************
> 
> 
> 
>> ------------------------------
>>
>> Message: 8
>> Date: Wed, 30 Jan 2008 08:02:17 -0300
>> From: "Felipe Aron" <felipearon em gmail.com>
>> Subject: Re: [firebase-br] Ajuda com INNER JOIN....
>> To: FireBase <lista em firebase.com.br>
>> Message-ID:
>>        <6a31e7720801300302u610dec39w9275f8cf3dcdc59b em mail.gmail.com>
>> Content-Type: text/plain; charset=ISO-8859-1
>>
>> Não entendi a parte de "atualizar".... você quer somente trazer os dados
>> ou
>> autalizar algum campo de uma tabela ??
>> Qual o problema que acontece com você ??
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 





Mais detalhes sobre a lista de discussão lista