Minimizar o Select

18/01/2006

0

Caras como faço para minimizar este processo
Digo, o select ser mais rapido...


DM.qryOper.SQL.Clear;
DM.qryOper.SQL.Add(´Delete´);
DM.qryOper.SQL.Add(´FROM Pedido WHERE NrPed Not In´);
DM.qryOper.SQL.Add(´(SELECT P.NrPed From Pedido P , CliLote C Where P.CodCli = C.CodCli´);
DM.qryOper.SQL.Add(´And C.ULtREsult = ´´PE´´ ) ´);
DM.qryOper.ExecSQL;
DM.qryOper.SQL.Clear;
DM.qryOper.SQL.Add(´Delete´);
DM.qryOper.SQL.Add(´FROM ItPed WHERE NrPed Not In´);
DM.qryOper.SQL.Add(´(SELECT P.NrPed From Pedido P , CliLote C Where P.CodCli = C.CodCli´);
DM.qryOper.SQL.Add(´And C.ULtREsult = ´´PE´´ ) ´);
DM.qryOper.ExecSQL;
DM.qryOper.SQL.Clear;
DM.qryOper.SQL.Add(´Delete´);
DM.qryOper.SQL.Add(´FROM Pagamento WHERE NrPed Not In´);
DM.qryOper.SQL.Add(´(SELECT P.NrPed From Pedido P , CliLote C Where P.CodCli = C.CodCli´);
DM.qryOper.SQL.Add(´And C.ULtREsult = ´´PE´´ ) ´);
DM.qryOper.ExecSQL;
DM.qryOper.SQL.Clear;
DM.qryOper.SQL.Add(´Delete´);
DM.qryOper.SQL.Add(´FROM AltPed WHERE NrPed Not In´);
DM.qryOper.SQL.Add(´(SELECT P.NrPed From Pedido P , CliLote C Where P.CodCli = C.CodCli´);
DM.qryOper.SQL.Add(´And C.ULtREsult = ´´PE´´ ) ´);
DM.qryOper.ExecSQL;
DM.qryOper.SQL.Clear;


Uso com Access, esta demorando 6 minutos

Abraços


Tremonti

Tremonti

Responder

Posts

18/01/2006

Motta

1) Qual o tamanho de PEDIDO ? Sendo grande a demora seria esperada.

2) Avalie a criação de um indice para PEDIDO.ULtREsult

3) O SELECT <SELECT P.NrPed From Pedido P , CliLote C Where P.CodCli = C.CodCli´> é feito varias vezes , se o resultado da lista for pequeno valeria a pena faze-lo 1 vez e montar a lista alterando o sql dinamicamente.Fazendo um loop em cima do select se montaria a list numa string auxiliar , exemplo o select retorna os pedidos n
1 23 e 45 a string ficaria 1,23,45 seria juntada a cada select de delete, entedeu ?


Responder

18/01/2006

Rodrigo.medeiros

olha, dei uma olhada rápida por cima, mas o que faz a demora na execução é que vc está fazendo um select dentro de um delete, e ainda usando um NOT IN. Isso acarreta uma demora muito grande.

Tente usar uma das premissas básicas de SQL: ao pesquisar (ou usar delete ou update), coloque sempre a chave da tabela na cláusula where-and.

Claro, não sei quais são as chaves da sua tabela, mas tente não usar somente o CodCli e UltResult.

t+


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar