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
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
Curtir tópico
+ 0
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 ?
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+
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
Clique aqui para fazer login e interagir na Comunidade :)