1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Docum-est

Discussão em 'Progress 4GL' iniciado por fdantas, Fevereiro 9, 2009.

  1. fdantas

    fdantas Administrator Moderador

    Buscando informações da docum-est.

    Pessoal vejam o find abaixo, ele é terrivelmente lento.

    Código:
        FIND FIRST docum-est WHERE 
                   docum-est.serie-docto    = tt-movto-mapa-rec.serie-docto  
             AND  int(docum-est.nro-docto)  = tt-movto-mapa-rec.nro-docto    
             AND  docum-est.cod-emitente    = tt-movto-mapa-rec.cod-emitente 
             AND  docum-est.nat-operacao    = tt-movto-mapa-rec.nat-operacao 
        NO-LOCK NO-ERROR.
    
         IF NOT AVAIL docum-est THEN NEXT.
    
    A melhor maneira de se fazer essa consulta é usando o seguinte find


    Código:
        FIND FIRST docum-est WHERE 
                   docum-est.serie-docto    = tt-movto-mapa-rec.serie-docto  
             AND  docum-est.nro-docto       = string(tt-movto-mapa-rec.nro-docto , "9999999")    
             AND  docum-est.cod-emitente    = tt-movto-mapa-rec.cod-emitente 
             AND  docum-est.nat-operacao    = tt-movto-mapa-rec.nat-operacao 
        NO-LOCK NO-ERROR.
    
         IF NOT AVAIL docum-est THEN NEXT.
    
    O motivo disso é a conversao que é feita no campo nro-docto, essa conversao faz com que o Progress faca uma linear search na tabela, pois ele nao tem como verificar a condicao antes de converter o valor.
  2. sl4v3r

    sl4v3r Membro Participativo

    Qualquer função ou calculo na condição do 'where", o SGBD faz o tablescan... que é terrível para performance.

Compartilhe esta Página