Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

ABAP performance

Former Member
0 Likes
545

Hi!

I have the following code. With huge amount of data (250000 record) it is running for 8 minutes.

The SELECT is not a problem, because it takes only 20 seconds, after I created an alternative index for the COEP table.

SELECT * FROM covp
    INTO TABLE lt_covp
    WHERE budat >= datum_tol AND
          budat <= datum_ig AND
          objnr LIKE 'OR%'.        "pm orders

  IF sy-subrc = 0.

    REFRESH lt_aufk_seged.
    LOOP AT lt_covp INTO wa_covp.
      MOVE wa_covp-objnr+2(12) TO wa_aufk_seged-aufnr.
      APPEND wa_aufk_seged TO lt_aufk_seged.
    ENDLOOP.
    SORT lt_aufk_seged.
    DELETE ADJACENT DUPLICATES FROM lt_aufk_seged.

    SELECT * FROM aufk
      INTO TABLE lt_aufk
      FOR ALL ENTRIES IN lt_aufk_seged
      WHERE aufnr = lt_aufk_seged-aufnr.

  ENDIF.

* until this point, the program runs for 20 seconds. This is fine.

* Only the following code part causes the problem!!!!!!!!!!!!!!!!!!!!!

  SORT lt_aufk.

  LOOP AT lt_covp INTO wa_covp.

    lv_aufnr = wa_covp-objnr+2(12).
    READ TABLE lt_aufk INTO wa_aufk
      WITH KEY aufnr = lv_aufnr
      BINARY SEARCH.
    IF sy-subrc = 0.

      CLEAR wa_worktime.
      CLEAR wa_material.
      CLEAR wa_service.
      CLEAR wa_pm_orders.

      IF wa_covp-vrgng = 'RKL' OR             
         wa_covp-vrgng = 'RKLN'.              
        PERFORM move_covp_to_other USING wa_covp
                                CHANGING wa_worktime.
      ENDIF.

      IF wa_covp-vrgng = 'COIN' AND NOT
         wa_covp-matnr IS INITIAL.
        IF wa_covp-ebeln IS INITIAL.                 "anyag
          PERFORM move_covp_to_other USING wa_covp
                                  CHANGING wa_material.
        ELSE.                                        "szolgáltatás
          PERFORM move_covp_to_other USING wa_covp
                                  CHANGING wa_service.
        ENDIF.
      ENDIF.

      IF NOT wa_worktime IS INITIAL.
        APPEND wa_worktime TO gt_worktime.
      ENDIF.
      IF NOT wa_material IS INITIAL.
        APPEND wa_material TO gt_material.
      ENDIF.
      IF NOT wa_service IS INITIAL.
        APPEND wa_service TO gt_service.
      ENDIF.

      READ TABLE gt_pm_orders INTO wa_pm_orders
        WITH KEY aufnr = wa_aufk-aufnr.
      IF sy-subrc <> 0.
        MOVE-CORRESPONDING wa_aufk TO wa_pm_orders.
        APPEND wa_pm_orders TO gt_pm_orders.
      ENDIF.

    ENDIF.

  ENDLOOP.

ENDFUNCTION.

*-----------------------------------------------------------------------
* FORM move_covp_to_other
*-----------------------------------------------------------------------
FORM move_covp_to_other USING p_wa_covp LIKE covp
                        CHANGING p_wa LIKE covp.
  MOVE p_wa_covp-kokrs TO p_wa-kokrs.
  MOVE p_wa_covp-belnr TO p_wa-belnr.
  MOVE p_wa_covp-buzei TO p_wa-buzei.
  MOVE p_wa_covp-perio TO p_wa-perio.
  MOVE p_wa_covp-wtgbtr TO p_wa-wtgbtr.
  MOVE p_wa_covp-wogbtr TO p_wa-wogbtr.
  MOVE p_wa_covp-wkgbtr TO p_wa-wkgbtr.
  MOVE p_wa_covp-megbtr TO p_wa-megbtr.
  MOVE p_wa_covp-mbgbtr TO p_wa-mbgbtr.
  MOVE p_wa_covp-objnr TO p_wa-objnr.
  MOVE p_wa_covp-gjahr TO p_wa-gjahr.
  MOVE p_wa_covp-kstar TO p_wa-kstar.
  MOVE p_wa_covp-vrgng TO p_wa-vrgng.
  MOVE p_wa_covp-twaer TO p_wa-twaer.
  MOVE p_wa_covp-owaer TO p_wa-owaer.
  MOVE p_wa_covp-meinh TO p_wa-meinh.
  MOVE p_wa_covp-meinb TO p_wa-meinb.
  MOVE p_wa_covp-werks TO p_wa-werks.
  MOVE p_wa_covp-matnr TO p_wa-matnr.
  MOVE p_wa_covp-budat TO p_wa-budat.
ENDFORM.   "move_covp_to_other

Any suggestions are welcome.

Tamá

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
503

Hi,

Enhance the Speed of the query in alterting the READ TABLE.

CHECK THELINK.

[Reading Lines of Tables|http://help.sap.com/saphelp_nw70/helpdata/en/fc/eb35f8358411d1829f0000e829fbfe/content.htm]

Regards,

Balakumar G.

Reward Points if Helpful.

3 REPLIES 3
Read only

Former Member
0 Likes
504

Hi,

Enhance the Speed of the query in alterting the READ TABLE.

CHECK THELINK.

[Reading Lines of Tables|http://help.sap.com/saphelp_nw70/helpdata/en/fc/eb35f8358411d1829f0000e829fbfe/content.htm]

Regards,

Balakumar G.

Reward Points if Helpful.

Read only

b_deterd2
Active Contributor
0 Likes
503

I would suggest using LOOP AT....ASSIGNING <fs>.

With this you point to your data rather than putting it into a work area.

This should help you a little.

Regards,

Bert

Read only

Former Member
0 Likes
503

This statement was slow.

READ TABLE gt_pm_orders INTO wa_pm_orders

WITH KEY aufnr = wa_aufk-aufnr.

IF sy-subrc <> 0.

...

ENDIF.

This code part was storing only those entries, which are not already in this internal table.

I removed it and after the loop I used a DELETE ADJACENT DUPLICATES statement.

It caused a cc. 100 times improvement in the performance. But of course it depends on the number of entries.