SAP ABAP 效能優化實踐

leniz發表於2010-04-06

效能優化實踐:

1.        宣告內表

TYPES : Begin of fs_XX,

                  F1(4) type c, 

                  F2(2) type n,

                  F3(2) type c,

                End of fs_xx.

DATA : it_XX type standard/sorted/hashed table of fs_XX,

              Wa_XX like line of it_XX.

 用完了記得清理,包括釋放空間。

    Refresh it_xx.

    Free it_xx.

2.        刪除內表記錄

如果一項刪除如下

Loop at source_package assigning .

   If -F1 = ‘X’.

        Delete source_package. 

  Endif.

Endloop.

很明顯,這個刪除是針對整個內表操作的,不妨寫成如下形式

Delete source_package where F1 = ‘X’.

   有些時候,可能條件是多個,那麼可以採用如下形式:

DATA : TEMP type F1. “i.e. the field for which we are creating SELECT-OPTIONS

SELECT-OPTIONS : s_F1 for temp.

DATA : wa like line of s_F1.

wa-sign = 'I'.

wa-option = 'EQ'.

wa-low = 'ABCD'.

append wa to s_F1.

wa-sign = 'I'.

wa-option = 'EQ'.

wa-low = 'EFGH'.

append wa to s_F1.

Delete source_package where F1 in s_f1.

即把條件寫到一個內表中。

3.     Select 系統表用到For All Entries In

我們知道在資料庫中可以用內聯關係來顯示錶,那麼For—語法有點類似,它把內表和系統表做了聯合。當然使用之前,需要檢查內表的大小,如果內表為空,那麼Select的結果會是所有的系統表值,結局就事與願違了。

DATA : nb type n.

Describe table it_XX lines nb.

If nb is not initial.

Select F1 F2 F3 from YYY

into it_XX

for all entries in source_package

Where F1 = source_package-F1.

Endif.

 

4.     值比較

請用“IS INITIAL”替代 等於 “”,因為數值型的空值可能是0,而不是””.

5.     內表記錄修改

請用Field-Symbol型別的工作區,道理和C語言的指標非常相識。如果一定要用Modify,那麼請跟上索引值sy-tabix.

6.     內表複製

請用It1[] = it2[].

7.     讀取內表

讀取內表之前,排排序是個好習慣。

8.     內表迴圈巢狀內表

LOOP AT itab1 INTO wa1.

LOOP AT itab2 INTO wa2 WHERE f1 = wa1-f1

AND f3 = wa1-f3.

    “………..

ENDLOOP.

ENDLOOP.

以上的效能是很差的,會做很多無謂的迴圈。

SORT itab2 BY f1 f3.

LOOP AT itab1 INTO wa1.

READ TABLE itab2 WITH KEY f1 = wa1-f1

f3 = wa1-f3 BINARY SEARCH TRANSPORTING NO FIELDS.

IF sy-subrc EQ 0.

v_tabix = sy-tabix.

LOOP AT itab2 INTO wa2 FROM v_tabix.

IF wa2-f1 NE wa1-f1 or wa2-f3 NE wa1-f3. EXIT ENDIF.

*processing or records here

ENDLOOP.

ENDIF.

ENDLOOP.

上面的結構設計做了一些調整,雖然還是雙迴圈,但是加了一些跳躍動作,體會之後會大呼奇妙。巧的是我當初優化CSRP用得正是這一招。 不得不說,英雄所見略同啊!

 

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/554557/viewspace-631404/,如需轉載,請註明出處,否則將追究法律責任。

相關文章