sum*_*til 1 performance abap internal-tables
两个表均按键 KNO 排序
\n LOOP AT lt_header INTO lwa_header.\n\n LOOP AT lt_items INTO lwa_item\n\n WHERE key = lwa_header-KNO\n\n \xe2\x80\x9c\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6.\n\n ENDLOOP.\n\n ENDLOOP.\nRun Code Online (Sandbox Code Playgroud)\n如果表中的条目数量很大,这将需要更多时间来执行。我应该如何修改代码以提高性能?
\n您应该能够通过使用辅助表键来改进第二个表中的查找。声明表变量时需要声明这样的键:
DATA lt_items TYPE TABLE OF whatever WITH NON-UNIQUE SORTED KEY k1 COMPONENTS key.
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用此键来加速该表中的查找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.
Run Code Online (Sandbox Code Playgroud)
当您可以保证 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.
Run Code Online (Sandbox Code Playgroud)