兩個表都按關鍵 KNO 排序
LOOP AT lt_header INTO lwa_header.
LOOP AT lt_items INTO lwa_item
WHERE key = lwa_header-KNO
“……….
ENDLOOP.
ENDLOOP.
如果表中的條目數量很大,這將需要更多時間來執行。我應該如何修改代碼以提高性能?
uj5u.com熱心網友回復:
您應該能夠通過使用輔助表鍵來改進第二個表中的查找。宣告表變數時需要宣告這樣一個鍵:
DATA lt_items TYPE TABLE OF whatever WITH NON-UNIQUE SORTED KEY k1 COMPONENTS key.
然后,您可以使用此鍵從時間復雜度O(n)或O(log n)時間復雜度加速該表中的查找:
LOOP AT lt_header INTO lwa_header.
LOOP AT lt_items INTO lwa_item
USING KEY k1
WHERE key = lwa_header-KNO.
"...
ENDLOOP.
ENDLOOP.
當您可以保證 lt_items-key 中的值始終是唯一的(“key”沒有兩行具有相同的值)時,您甚至可以使用哈希鍵,它甚至更快(恒定時間):
DATA lt_items TYPE TABLE OF whatever WITH UNIQUE HASHED KEY k1 COMPONENTS key.
LOOP AT lt_header INTO lwa_header.
READ TABLE lt_items INTO lwa_item
WITH TABLE KEY k1
COMPONENTS key = lwa_header-KNO.
IF sy-subrc = 0.
"...
ENDIF.
ENDLOOP.
uj5u.com熱心網友回復:
您可以使用并行游標。這是在嵌套回圈中提高性能的好技術。有關更多資訊,請查看此鏈接。
此外,欄位符號對性能更好。
DATA lv_tabix TYPE sy-tabix.
SORT: lt_header BY kno,
lt_items BY kno.
LOOP AT lt_header ASSIGNING FIELD-SYMBOL(<lfs_header>).
READ TABLE lt_items TRANSPORTING NO FIELDS
WITH KEY kno = <lfs_header>-kno
BINARY SEARCH.
lv_tabix = sy-tabix.
LOOP AT lt_items FROM lv_tabix ASSIGNING FIELD-SYMBOL(<lfs_item>).
IF <lfs_header>-kno <> <lfs_item>-kno.
EXIT.
ENDIF.
"Your logic should be here..
ENDLOOP.
ENDLOOP.
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/323502.html
上一篇:古斯塔夫森定律想論證什么?
下一篇:熊貓:日期時間索引和間隔索引交集
