点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
以下两个解决方案具有相同的结果。 我的问题是:
1。 哪个更好?
2。 如果我们处理大量数据,如何调整性能?
解决方案1:
...
在mt_person_data分配LOOP AT
...
ENDLOOP。
更新/iwfnd/person_data表mt_person_data中指定的客户端。
ASSERT sy-subrc = 0。
提交工作。
...
解决方案2:
...
在mt_person_data INTO ls_person_data中循环。
更新/iwfnd/person_data客户端指定
SET汇总= ls_person_data汇总
时间戳= ls_person_data时间戳
mandt = ls_person_data-mandt
AND id = ls_person_data-id。
ASSERT sy-subrc =0。
ENDLOOP。
提交工作。
...
您好 Andy Yen
这取决于表结构和数据量:
解决方案1会将itab mt_person_data的所有数据传输到数据库服务器,并更新给定键的/iwfnd/person_data的所有字段,以及所有依存索引,即使值没有改变!
因此,如果表中只有很少的记录和字段,并且没有其他索引,则可能会很好。
使用解决方案2可以减少数据传输,只有必要的DB字段可以更改,并且可能触发索引更新。 另外,您可以更改COMMIT处理以支持包处理(例如,每20条记录提交一次)。
致谢
Domi
您忘记了更新行 row表示需要为每一行建立一个数据库连接,而不是为选项1进行一次连接。如果要更新的数据量很大,则建议的执行速度会变慢。
I 出于性能方面的原因,总是喜欢批量更新(仅开销一次)。 在我看来,它的唯一缺点是预先记录。 如果有错误,则无法告诉用户哪个Set导致了错误。
我现在无法查看系统,但是没有选项TRANSFERING或类似于"仅更新某些列"的选项吗? 可以与批量更新一起使用。
解决方案2更好:
因为您是从工作区逐行更新数据库表...
解决方案1:从内部表更新数据库表... \
这可能会降低性能问题...可能是内部表中包含大量数据...
一周热门 更多>