Demora en Consulta

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • brujop
    Junior Member
    • nov
    • 29

    #1

    Demora en Consulta

    Buen dia, amigos de mundosap tengo una consulta que demora mas de tres minutos en ejecutarse, es la siguiente:

    SELECT cobk~budat coep~objnr coep~wkgbtr coep~mbgbtr coep~meinb
    coep~kstar coep~parob
    INTO CORRESPONDING FIELDS OF TABLE ti_cobk_coep3
    FROM coep
    INNER JOIN cobk ON coep~mandt = cobk~mandt AND coep~kokrs = cobk~kokrs AND coep~belnr = cobk~belnr
    WHERE cobk~budat IN so_budat AND
    coep~kokrs EQ 'GAND' AND
    coep~wrttp EQ '04' AND
    coep~lednr EQ '00' AND
    coep~objnr IN r_objnr AND
    coep~vrgng NE 'KOAO'.

    Espero me puedan ayudar a optimizarla, me han dicho que se puede utilizar funciones en vez de los select, o tambien con vistas, si tuvieran algun ejemplo me caeria perfecto.

    Muchas Gracias.
  • Mauricio Hidalgo
    Senior Member
    • may
    • 481

    #2
    Estimado partir la consulta por la fecha de contabilizacion en la tabla COBK pésimo porque esa tabla no esta indexada por ese campo según mi instalacion de SAP. Básate en los indices secundarios que tiene disponible en la tabla COEP. Pareciera que el mas cercano según tus parametros de consulta es el índice COEP~1 eso si te faltaria poner el ejercicio como parámetro de consulta, el orden sería:

    where coep~lednr EQ '00' AND
    coep~objnr IN r_objnr AND
    coep~gjahr IN r_gjahr (añade este parámetro)
    coep~wrttp EQ '04'.

    Hasta aquí para que el opmizador use el indice que te indico

    y luego desde tu tabla interna borras según los otros parámetros que tienes

    delete ti_cobk_coep3 where budat not in so_budat.
    delete ti_cobk_coep3 where kokrs <> 'GAND'.
    delete ti_cobk_coep3 where vrgng = 'KOAO'.


    Espero te ayude

    Comentario

    • brujop
      Junior Member
      • nov
      • 29

      #3
      Mauricio gracias por responder, te comento que tengo como parametros de ingreso:

      La fecha de contabilizacion
      Centro
      Planificador de necesidades

      Si ya tengo la fecha es necesario colocar el Ejercicio.

      Coloque lo que indicaste pero la performance no mejoro.
      Si tuvieras alguna otra ayuda te lo agradeceria.

      Comentario

      • Anthony Martinez
        Member
        • nov
        • 30

        #4
        Lo que deberias hacer primero es de alguna forma crear una estrctura que tenga los mismos campos y en el mismo orden de los campos que recoges en tu select (cobk~budat coep~objnr coep~wkgbtr coep~mbgbtr coep~meinb
        coep~kstar coep~parob) y hacer into table sin corresponding, segundo seria bueno que en tu pantalla de seleccion puedas agregarle coo parametro la sociedad CO que deseas consultar, porque hay que tener en cuenta que la tabla COEP es una tabla de gran dimension y sino le filtras con sus campos llave correspondientes podrias estar traendo una gran cantidad de informacion y es por ello la demora.

        Originalmente publicado por brujop
        Buen dia, amigos de mundosap tengo una consulta que demora mas de tres minutos en ejecutarse, es la siguiente:

        SELECT cobk~budat coep~objnr coep~wkgbtr coep~mbgbtr coep~meinb
        coep~kstar coep~parob
        INTO CORRESPONDING FIELDS OF TABLE ti_cobk_coep3
        FROM coep
        INNER JOIN cobk ON coep~mandt = cobk~mandt AND coep~kokrs = cobk~kokrs AND coep~belnr = cobk~belnr
        WHERE cobk~budat IN so_budat AND
        coep~kokrs EQ 'GAND' AND
        coep~wrttp EQ '04' AND
        coep~lednr EQ '00' AND
        coep~objnr IN r_objnr AND
        coep~vrgng NE 'KOAO'.

        Espero me puedan ayudar a optimizarla, me han dicho que se puede utilizar funciones en vez de los select, o tambien con vistas, si tuvieran algun ejemplo me caeria perfecto.

        Muchas Gracias.

        Comentario

        • jdelgado86
          Junior Member
          • nov
          • 24

          #5
          Crea un indice en la tabla y despues en el select pones algo asi

          SELECT
          bukrs
          belnr
          gjahr
          budat
          monat
          blart
          INTO TABLE it_bkpf
          FROM
          bkpf
          WHERE
          bukrs = p_bukrs AND
          gjahr = p_gjahr AND
          monat = p_monat
          %_HINTS DB6 '<IXSCAN TABLE=''BKPF'' INDEX=''"BKPF~BUT"'' />' .

          cambiarias la tabla bkpf y remplazarias BUT por el indice tuyo, segun se con esto obligas a que la busqueda utilice dicho indice, Suerte!!

          Comentario

          Trabajando...