Created
August 12, 2022 13:50
-
-
Save alezhu/ec4e10cf95feef38960b7892385303cc to your computer and use it in GitHub Desktop.
Test speed of geting unique values from internal table
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
*&---------------------------------------------------------------------* | |
*& Report ZTEST_extract_uniq | |
*&---------------------------------------------------------------------* | |
*& | |
*&---------------------------------------------------------------------* | |
REPORT ztest_extract_uniq. | |
TYPES: | |
BEGIN OF ts_result, | |
tag TYPE char30, | |
start TYPE i, | |
end TYPE i, | |
diff TYPE i, | |
count TYPE i, | |
END OF ts_result, | |
tt_result TYPE STANDARD TABLE OF ts_result WITH EMPTY KEY. | |
TYPES: | |
BEGIN OF ts_data, | |
ebeln TYPE ebeln, | |
ebelp TYPE ebelp, | |
matnr TYPE matnr, | |
END OF ts_data. | |
PARAMETERS p_repeat TYPE i DEFAULT 100. | |
PARAMETERS p_size TYPE i DEFAULT 10000. | |
START-OF-SELECTION. | |
PERFORM main. | |
FORM main. | |
DATA lt_result TYPE tt_result. | |
DATA ls_data TYPE ts_data. | |
DATA lt_data TYPE STANDARD TABLE OF ts_data WITH EMPTY KEY. | |
DATA: | |
BEGIN OF ls_matnr, | |
matnr TYPE matnr, | |
END OF ls_matnr, | |
lt_matnr LIKE HASHED TABLE OF ls_matnr WITH UNIQUE KEY matnr. | |
DO p_size TIMES. | |
ls_data-ebeln = sy-index. | |
ls_data-ebelp = sy-index. | |
ls_data-matnr = sy-index MOD 10. | |
APPEND ls_data TO lt_data. | |
ENDDO. | |
DO. | |
CASE sy-index. | |
WHEN 1. | |
APPEND VALUE #( | |
tag = 'COLLECT' | |
) TO lt_result ASSIGNING FIELD-SYMBOL(<s_result>). | |
WHEN 2. | |
APPEND VALUE #( | |
tag = 'INSERT' | |
) TO lt_result ASSIGNING <s_result>. | |
WHEN 3. | |
APPEND VALUE #( | |
tag = 'FOR GROUP' | |
) TO lt_result ASSIGNING <s_result>. | |
WHEN 4. | |
APPEND VALUE #( | |
tag = 'CORRESPONDING DISCARDING DUPLICATES' | |
) TO lt_result ASSIGNING <s_result>. | |
WHEN 5. | |
APPEND VALUE #( | |
tag = 'SELECT DISTINCT' | |
) TO lt_result ASSIGNING <s_result>. | |
WHEN 6. | |
APPEND VALUE #( | |
tag = 'SELECT+SORT+DELETE' | |
) TO lt_result ASSIGNING <s_result>. | |
WHEN 7. | |
APPEND VALUE #( | |
tag = 'COPY+SORT+DELETE+CORRESPONDING' | |
) TO lt_result ASSIGNING <s_result>. | |
WHEN OTHERS. | |
EXIT. | |
ENDCASE. | |
GET RUN TIME FIELD <s_result>-start. | |
CASE sy-index. | |
WHEN 1. | |
DO p_repeat TIMES. | |
CLEAR lt_matnr. | |
LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<s_data>). | |
ls_matnr-matnr = <s_data>-matnr. | |
COLLECT ls_matnr INTO lt_matnr. | |
ENDLOOP. | |
ENDDO. | |
WHEN 2. | |
DO p_repeat TIMES. | |
CLEAR lt_matnr. | |
LOOP AT lt_data ASSIGNING <s_data>. | |
INSERT VALUE #( matnr = <s_data>-matnr ) INTO TABLE lt_matnr. | |
ENDLOOP. | |
ENDDO. | |
WHEN 3. | |
DO p_repeat TIMES. | |
CLEAR lt_matnr. | |
lt_matnr = VALUE #( | |
FOR GROUPS fg_matnr OF <fs_data> IN lt_data | |
GROUP BY <fs_data>-matnr WITHOUT MEMBERS | |
( matnr = fg_matnr ) | |
). | |
ENDDO. | |
WHEN 4. | |
DO p_repeat TIMES. | |
CLEAR lt_matnr. | |
lt_matnr = CORRESPONDING #( lt_data DISCARDING DUPLICATES ). | |
ENDDO. | |
WHEN 5. | |
DO p_repeat TIMES. | |
CLEAR lt_matnr. | |
##ITAB_DB_SELECT | |
SELECT DISTINCT matnr FROM @lt_data AS input INTO TABLE @lt_matnr. | |
ENDDO. | |
WHEN 6. | |
DO p_repeat TIMES. | |
CLEAR lt_matnr. | |
SELECT matnr FROM @lt_data AS input INTO TABLE @DATA(lt_temp). | |
SORT lt_temp BY matnr. | |
DELETE ADJACENT DUPLICATES FROM lt_temp COMPARING matnr. | |
lt_matnr = lt_temp. | |
ENDDO. | |
WHEN 7. | |
DO p_repeat TIMES. | |
CLEAR lt_matnr. | |
DATA(lt_data2) = lt_data. | |
SORT lt_data2 BY matnr. | |
DELETE ADJACENT DUPLICATES FROM lt_data2 COMPARING matnr. | |
lt_matnr = CORRESPONDING #( lt_data2 ). | |
ENDDO. | |
WHEN OTHERS. | |
ENDCASE. | |
GET RUN TIME FIELD <s_result>-end. | |
<s_result>-diff = <s_result>-end - <s_result>-start. | |
<s_result>-count = lines( lt_matnr ). | |
ENDDO. | |
SORT lt_result BY diff. | |
LOOP AT lt_result ASSIGNING <s_result>. | |
WRITE: <s_result>-tag, <s_result>-diff, <s_result>-start, <s_result>-end, <s_result>-count. | |
NEW-LINE. | |
ENDLOOP. | |
ENDFORM. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment