APAGAR REGISTROS EM BD ACCESS

USUARIO.EXCLUIDOS 18/09/2006 20:15:16
#172276
Tenho duas tabelas:

TAB1 com 100 registros

TAB2 com 80.000 registros


Em TAB1 eu tenho os codigos dos clientes, por exemplo:
001
002
003
004...

Em TAB2, além de outros campos, também tenho os codigos dos clientes
001
002
003...

O que preciso é apagar de forma RàPIDA todos os registros de TAB2 que não constar em TAB1.

Eu faço isso dessa forma, mas está levando cerca de 7min e essa rotina eu preciso realizá-la várias vezes.

DT_control_TAB2.Recordset.MoveFirst
TB_TAB1.Index = "CLI_COD"
BD_DADOS.Execute "delete from TAB2 where cli_cod not in (select cli_cod from TAB1)"

O que está acima funciona perfeitamente, não há erros, o único problema é a demora.

Se alguém puder me dar uma luz.

Obrigado!

WEBER 18/09/2006 21:41:07
#172285
um o problema é q vc estausando um objeto data control para fazer a conexao, apesar que a consulta sql q vc esta usando ao meu ver esta de bom tamanho.

DT_control_TAB2.Recordset.MoveFirst 

aqui vc faz ref ao um controle data

  BD_DADOS.Execute "delete from TAB2 where cli_cod not in (select cli_cod from TAB1)" 

mas aqui me parece que vc esta usando uma conexao direta com o banco de dados

Ao meu ver me parece q esta tudo certo pois vc esta usando o metodo mais rapido para fazer uma exclusao, que seria conexao.execute e ainda usando uma sql delete, eu acho q a velocidade mais demorada pode ser fruto da clausula de validação q vc usa
where cli_cod not in (select cli_cod from TAB1)" 
e ainda por cima faz uma sselect de uma select oq tb perde desempenho, a não ser q vc esteja usando um banco de dados q permita ums store procedure (como sql e firebird) acho q nao tem muito oq vc fazer nao ...
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas