Array
(
)

Minimizar o Select

Tremonti
   - 18 jan 2006

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


Motta
   - 18 jan 2006

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 ?


Rodrigo.medeiros
   - 18 jan 2006

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+