使用 ABAP 7.40+ 语法进行最有效的 itab 过滤

Most efficient itab filtering with ABAP 7.40+ syntax

在 7.40 版中,我们有很多方法可以过滤内部 table 数据。 例如,可以使用这样的 ABAP 结构:

FILTER 运算符

DATA(lt_extract) =
  FILTER #( lt_bseg USING KEY matnr_bwtar WHERE matnr = CONV matnr( SPACE ) 
                                            AND bwtar = CONV bwtar( SPACE ) ).

FOR table iterations with VALUE构造运算符

DATA(lt_extract) = 
 VALUE tty_bseg( FOR line IN lt_bseg WHERE ( matnr EQ SPACE AND bwtar EQ SPACE ) ( line ) ).

是否有性能提升,为什么?

也许您知道任何其他有效执行内部 tables 过滤的语法?

网上没找到benchmark,不过自己做个测试很简单

专用于该任务的 FILTER 比其他构造更快是合乎逻辑的,因为在许多其他可能的操作之间进行选择需要开销成本。

FILTER 还具有强制开发人员使用索引的优势。当然,建立索引本身就有成本,因此您必须平衡其使用与完成的过滤量。

A​​BAP 文档 7.52 很好地解释了 FILTER 的性能以及何时不使用它的建议 (https://help.sap.com/http.svc/rc/abapdocu_752_index_htm/7.52/en-US/index.htm?file=abenconstructor_expression_filter.htm):

Table filtering can also be performed using a table comprehension or a table reduction with an iteration expression for table iterations with FOR. The operator FILTER provides a shortened format for this special case and is more efficient to execute.

A table filter constructs the result row by row. If the result contains almost all rows in the source table, this method can be slower than copying the source table and deleting the surplus rows from the target table.