基于 where 条件筛选内部表的最高性能方法



到目前为止,我总是使用它从内部表中获取特定行:

LOOP AT it_itab INTO ls_itab WHERE place = 'NEW YORK'.
    APPEND ls_itab TO it_anotherItab
    INSERT ls_itab INTO TABLE it_anotherItab
ENDLOOP.

但是,对于 7.40,似乎有 REDUCE、FOR、LINES OF 和 FILTER。FILTER 需要一个排序或哈希键,在我的示例中并非如此。所以我想只有 FOR 有问题。

DATA(it_anotherItab) = VALUE t_itab( FOR wa IN it_itab WHERE ( place = 'LONDON' )
                         ( col1 = wa-col2 col2 = wa-col3 col3 = ....... ) ).

问题是:

  • 两者确实在做同样的事情吗?第二个是附加还是插入?
  • 第二个变体中是否可以使用整个结构而不指定每一列?喜欢只是 ( wa (
  • 第二个例子更快吗?

根据您的评论,您还可以在标准表上定义排序的辅助键。看看这里的例子:

TYPES:
    BEGIN OF t_line_s,
        name1 TYPE name1,
        name2 TYPE name2,
        ort01 TYPE ort01,
    END OF t_line_s,
    t_tab_tt TYPE STANDARD TABLE OF t_line_s
        WITH NON-UNIQUE EMPTY KEY
        WITH NON-UNIQUE SORTED KEY place_key COMPONENTS ort01. "<<<
DATA(i_data) = VALUE t_tab_tt( ). " fill table with test data
DATA(i_london_only) = FILTER #( 
    i_data 
    USING KEY place_key  " we want to use the secondary key
    WHERE ort01 = CONV #( 'london' ) " stupid conversion rules...
).
" i_london_only contains the filtered entries now

更新:
在我的快速和肮脏的性能测试中,FILTER第一次调用时很慢,但之后击败了LOOP-APPEND变体。

更新 2:
今天找到了原因...

。非唯一辅助表键的管理将在下次显式使用辅助表键(延迟更新(时更新。

相关内容

  • 没有找到相关文章

最新更新