mejorar performance

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • acontreras
    Junior Member
    • oct
    • 16

    #1

    mejorar performance

    Hola:

    Miren tengo el siguiente codigo:

    SELECT ebeln INTO CORRESPONDING FIELDS OF TABLE t_ekko
    FROM ekko
    WHERE ebeln IN ebeln
    AND kdatb IN s_kdatb
    AND kdate IN s_kdate .

    SELECT banfn bnfpo INTO CORRESPONDING FIELDS OF TABLE t_ekpo
    FROM ekpo
    FOR ALL ENTRIES IN t_ekko
    WHERE ebeln EQ t_ekko-ebeln .

    select konnr frgkz banfn ebeln ebelp frgdt bnfpo bsart frggr fixkz
    badat bedat lfdat werks ekorg matkl ernam menge meins matnr
    txz01 lgort knttp ebakz loekz ekgrp preis peinh waers bsmng
    into corresponding fields of table i_eban
    from eban
    for all entries in t_ekpo
    where banfn eq t_ekpo-banfn
    and bnfpo eq t_ekpo-bnfpo
    and banfn in banfn
    and werks in werks
    and bsart in bsart
    and badat in badat
    and ekgrp in ekgrp
    and ebeln in ebeln
    and bedat in bedat
    and konnr in konnr.

    y me pidieron optimizarlo utilizando inner join, y me quedó algo así:

    SELECT * INTO CORRESPONDING FIELDS OF TABLE i_eban
    FROM ekko as A
    JOIN ekpo as B ON A~ebeln = B~ebeln
    JOIN eban as C ON B~banfn = C~banfn and B~bnfpo = C~bnfpo
    WHERE A~ebeln IN ebeln
    AND A~kdatb IN s_kdatb
    AND A~kdate IN s_kdate
    AND C~banfn IN banfn
    AND C~werks IN werks
    AND C~bsart IN bsart
    AND C~badat IN badat
    AND C~ekgrp IN ekgrp
    AND C~ebeln IN ebeln
    AND C~bedat IN bedat
    AND C~konnr IN konnr
    .

    la cosa es que al ejecutarlo no me devuelve los mismos datos, algo estoy haciendo mal en el join, por eso solicito su ayuda.

    pd: ya habia escrito antes de este tema pero en la empresa quedo parado, ahora lo volvieron a retomar. ayudenme porfa llevo super poco en abap.
    gracias y saludos
  • mysmb2
    Senior Member
    • ene
    • 406

    #2
    hola,
    fijate que con los FOR ALL ENTRIES podes estar trayendo registros duplicados.
    otra cosa ya que lo que tenes que hacer es mejorar la performace no te conviene hacer INTO CORRESPONDING FIELDS OF TABLE solamente INTO TABLE pero acordate de que la tabla interna tenga la misma estructura y orden que los campos que recuperas del select.


    Saludos
    Sebastián Chiavia
    http://www.programacionabap.com.ar

    Comentario

    • marianoa
      Member
      • jun
      • 77

      #3
      siempre antes de hacer un for all entries te tenes uqe fijar que la tabla interna esa tenga datos, si no eso no influye como condicion y trae todos los datos.

      Comentario

      • mystic_soul
        Member
        • sep
        • 76

        #4
        Para mi, me parece que todo en un join no va a ser de lo mas performante que digamos, porque estas trabajando con tablas que son pesadas, como la EKPO y la EBAN.. Yo te diria que hagas esto: un join con las tablas EKKO y EKPO, y un select con la tabla resultante del join y la tabla EBAN.. no se si se entiende :S

        Por otro lado, fijate esto:
        * el corresponding fields en un select no es performante (ya lo dijeron)
        * fijate en las condiciones del where, ponerlos ordenados y por clave es un beneficio
        * Anda comparando los tiempos y te vas a dar cuenta cuan es performante!

        Espero que te pueda ayudar
        Saludos!

        Comentario

        Trabajando...