8

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

过滤器运算符

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

使用VALUE构造运算符的FOR表迭代

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

两者之间是否有任何性能提升,为什么?

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

4

1 回答 1

9

我在网上没有找到任何基准测试,但是自己做一个测试是如此简单。

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 为这种特殊情况提供了一种缩短的格式,并且执行起来更高效

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

于 2018-02-17T13:23:21.653 回答