Scenario: Many times In development scenario we come across situations where we need to have a nested loop to find our the matching records in the Header and the Item table. In that case we follow Nested loop which takes a longer processing time. To Improve the program performance the Nested Loop Condition can be optimized in a certain way called Parallel Cursor technique to improve the performance.
The below post demonstrates the same by considering the two table : BKPF & BSEG.
_________________________________________________________________________________
REPORT zparallel_cursor_test.
DATA : lt_bkpf TYPE TABLE OF bkpf,
lt_bseg TYPE TABLE OF bseg,
ls_bkpf TYPE bkpf,
ls_bseg TYPE bseg.
DATA : lv_time1 TYPE i,
lv_time2 TYPE i,
lv_time3 TYPE i,
lv_time4 TYPE i,
lv_res_time_gn_process TYPE i,
lv_res_time_pa_process TYPE i,
indx TYPE i.
DATA : lv_bkpf_recs TYPE i.
DATA : lv_bseg_recs TYPE i.
START-OF-SELECTION.
SELECT * FROM bkpf INTO TABLE lt_bkpf.
SELECT * FROM bseg INTO TABLE lt_bseg.
DESCRIBE TABLE lt_bkpf LINES lv_bkpf_recs.
DESCRIBE TABLE lt_bseg LINES lv_bseg_recs.
GET RUN TIME FIELD lv_time1.
LOOP AT lt_bkpf INTO ls_bkpf.
LOOP AT lt_bseg INTO ls_bseg WHERE vbeln = ls_bkpf-belnr.
* BUSINESS LOGIC GOES HERE.
ENDLOOP.
ENDLOOP.
GET RUN TIME FIELD lv_time2.
lv_res_time_gn_process = lv_time2 - lv_time1.
* Applying Parallel Cursor Technique
SORT lt_bkpf BY belnr.
SORT lt_bseg BY belnr.
GET RUN TIME FIELD lv_time3.
LOOP AT lt_bkpf INTO ls_bkpf.
READ TABLE lt_bseg INTO ls_bseg WITH KEY belnr = ls_bkpf-belnr BINARY SEARCH.
IF sy-subrc = 0.
indx = sy-tabix.
LOOP AT lt_bseg INTO ls_bseg FROM indx.
IF ls_bseg-belnr <> ls_bkpf-belnr.
EXIT.
ENDIF.
* BUSINESS LOGIC GOES HERE.
ENDLOOP.
ENDIF.
ENDLOOP.
GET RUN TIME FIELD lv_time4.
lv_res_time_pa_process = lv_time4 - lv_time3.
WRITE :/ 'Comparision Between Nested Loop And Parallel Cursor Technique'.
WRITE:/ 'No Of records in BKPF(Header) Table = ', lv_bkpf_recs.
WRITE:/ 'No Of records in BSEG(Item) Table = ', lv_bseg_recs.
Write :/ 'Time Taken in Normal Nested loop Processing', lv_res_time_gn_process ,'Vs.' ,
' Time Taken In Parallel Cursor Technique', lv_res_time_pa_process.
_________________________________________________________________________________
Output:
_________________________________________________________________________________
_________________________________________________________________________________
The below post demonstrates the same by considering the two table : BKPF & BSEG.
_________________________________________________________________________________
REPORT zparallel_cursor_test.
DATA : lt_bkpf TYPE TABLE OF bkpf,
lt_bseg TYPE TABLE OF bseg,
ls_bkpf TYPE bkpf,
ls_bseg TYPE bseg.
DATA : lv_time1 TYPE i,
lv_time2 TYPE i,
lv_time3 TYPE i,
lv_time4 TYPE i,
lv_res_time_gn_process TYPE i,
lv_res_time_pa_process TYPE i,
indx TYPE i.
DATA : lv_bkpf_recs TYPE i.
DATA : lv_bseg_recs TYPE i.
START-OF-SELECTION.
SELECT * FROM bkpf INTO TABLE lt_bkpf.
SELECT * FROM bseg INTO TABLE lt_bseg.
DESCRIBE TABLE lt_bkpf LINES lv_bkpf_recs.
DESCRIBE TABLE lt_bseg LINES lv_bseg_recs.
GET RUN TIME FIELD lv_time1.
LOOP AT lt_bkpf INTO ls_bkpf.
LOOP AT lt_bseg INTO ls_bseg WHERE vbeln = ls_bkpf-belnr.
* BUSINESS LOGIC GOES HERE.
ENDLOOP.
ENDLOOP.
GET RUN TIME FIELD lv_time2.
lv_res_time_gn_process = lv_time2 - lv_time1.
* Applying Parallel Cursor Technique
SORT lt_bkpf BY belnr.
SORT lt_bseg BY belnr.
GET RUN TIME FIELD lv_time3.
LOOP AT lt_bkpf INTO ls_bkpf.
READ TABLE lt_bseg INTO ls_bseg WITH KEY belnr = ls_bkpf-belnr BINARY SEARCH.
IF sy-subrc = 0.
indx = sy-tabix.
LOOP AT lt_bseg INTO ls_bseg FROM indx.
IF ls_bseg-belnr <> ls_bkpf-belnr.
EXIT.
ENDIF.
* BUSINESS LOGIC GOES HERE.
ENDLOOP.
ENDIF.
ENDLOOP.
GET RUN TIME FIELD lv_time4.
lv_res_time_pa_process = lv_time4 - lv_time3.
WRITE :/ 'Comparision Between Nested Loop And Parallel Cursor Technique'.
WRITE:/ 'No Of records in BKPF(Header) Table = ', lv_bkpf_recs.
WRITE:/ 'No Of records in BSEG(Item) Table = ', lv_bseg_recs.
Write :/ 'Time Taken in Normal Nested loop Processing', lv_res_time_gn_process ,'Vs.' ,
' Time Taken In Parallel Cursor Technique', lv_res_time_pa_process.
_________________________________________________________________________________
Output:
_________________________________________________________________________________
_________________________________________________________________________________
No comments:
Post a Comment