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

Sun*_*her 6 sap abap filtering

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

FILTER运算符

DATA(lt_extract) =
  FILTER #( lt_bseg USING KEY matnr_bwtar WHERE matnr = CONV matnr( SPACE ) 
                                            AND bwtar = CONV bwtar( SPACE ) ).
Run Code Online (Sandbox Code Playgroud)

FOR与表迭代VALUE建设运营

DATA(lt_extract) = 
 VALUE tty_bseg( FOR line IN lt_bseg WHERE ( matnr EQ SPACE AND bwtar EQ SPACE ) ( line ) ).
Run Code Online (Sandbox Code Playgroud)

一个人的表现有没有增加,为什么?

也许你知道任何其他语法来有效地执行内部表过滤?

San*_*ssi 6

我没有在网上找到任何基准测试,但是自己进行测试非常简单.

将专门用于该任务的FILTER比其他具有在许多其他可能操作之间进行选择的开销成本的构造更快是逻辑上的.

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

ABAP文档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):

  • 表过滤也可以使用表理解或表减少来执行,其中迭代表达式用于使用FOR的表迭代.操作员FILTER为此特殊情况提供缩短的格式,并且执行效率更高.

  • 表过滤器逐行构造结果.如果结果几乎包含源表中的所有行,则此方法可能比复制源表和从目标表中删除多余行慢.