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

时间:2018-02-16 11:36:12

标签: filtering sap abap

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

FILTER运营商

DATA(lt_extract) =
  FILTER #( lt_bseg USING KEY matnr_bwtar WHERE matnr = CONV matnr( SPACE ) 
                                            AND bwtar = CONV bwtar( SPACE ) ).
FOR构造运算符

VALUE表迭代

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

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

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

1 个答案:

答案 0 :(得分:5)

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

专门针对该任务的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):

  •   

    表格过滤也可以使用表格理解或表格来执行   使用表迭代的迭代表达式减少表   对于。操作员FILTER为此特殊提供缩短的格式   case和执行效率更高

  •   

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