技术开发 频道

ABAP性能实例七例

    二、Context

    1.Supply/Demand vs. SELECT

    三、Internal Tables

    1. Using explicit work areas(显示的使用工作区)

    显示的指定工作区可以避免不必要的Move操作。见下列内表操作的语句:

    APPEND wa TO itab.
    INSERT wa INTO itab.
    COLLECT wa INTO itab.
    MODIFY itab FROM wa.
    READ TABLE itab INTO wa.
    LOOP AT itab INTO wa.


    ITAB = WA.

    APPEND ITAB.

    2.Linear search vs. binary search

    如果内表的数据超过20条,由于线性检索会遍历整个内表,这将会非常耗时。将内表排序并使用Binary Search,或者使用SORTED TABLE类型的内表。如果内表有n条记录,线性查找的次数为O( n ),Binary Search的查找次数为O( log2( n ) ).

    READ TABLE ITAB INTO WA WITH KEY K = 'X'

                    BINARY SEARCH.

    

    READ TABLE ITAB INTO WA

                    WITH KEY K = 'X'.

    3.Dynamic vs. static key access

    动态键值的读取比静态键值的读取要慢,

    READ TABLE ITAB INTO WA

                    WITH KEY K = 'X'.

    READ TABLE ITAB INTO WA

                    WITH KEY (NAME) = 'X'.

    4.Secondary indices

    If you need to access an internal table with different keys repeatedly, keep your own secondary indices. With a secondary index, you can replace a linear search with a binary search plus an index access.

    READ TABLE SEC_IDX INTO  SEC_IDX_WA

         WITH KEY DATE = SY-DATUM

              BINARY SEARCH.

    IF SY-SUBRC = 0.

      READ TABLE ITAB INTO WA

                      INDEX SEC_IDX_WA-INDX.

      " ...

    ENDIF.

    
    READ TABLE ITAB INTO WA

         WITH KEY DATE = SY-DATUM.

    IF SY-SUBRC = 0.

      " ...

    ENDIF.

    5.Key access to multiple lines

    LOOP ... WHERE比 LOOP/CHECK更快,因为LOOP ... WHERE只处理满足特定条件的数据。如果LOOP ... WHERE和FROM i1 and/or TO i2条件一起使用,性能会更好。

    LOOP AT ITAB INTO WA WHERE K = 'X'.

      " ...

    ENDLOOP.
   

    LOOP AT ITAB INTO WA.

      CHECK WA-K = 'X'.

      " ...

    ENDLOOP.

0
相关文章