您的位置:首页 > 其它

ABAP程序编写过程中怎么提高程序执行效率四

2015-04-23 19:49 357 查看
1、使用where语句

不推荐

Select * from zflight.

Check : zflight-airln = ‘LF’ and zflight-fligh = ‘BW222’.

Endselect.

推荐

Select * from zflight where airln = ‘LF’ and fligh = ‘BW222’.

Endselect.

2、使用聚合函数

不推荐

Maxnu = 0.

Select * from zflight where airln = ‘LF’ and cntry = ‘IN’.

Check zflight-fligh > maxnu.

Maxnu = zflight-fligh.

Endselect.

推荐

Select max( fligh ) from zflight into maxnu where airln = ‘LF’ and cntry = ‘IN’.

3、使用视图代替基本表查询

不推荐

Select * from zcntry where cntry like ‘IN%’.

Select single * from zflight where cntry = zcntry-cntry and airln = ‘LF’.

Endselect.

推荐

Select * from zcnfl where cntry like ‘IN%’ and airln = ‘LF’.

Endselect.

4、使用INTO table 代替select endselect

不推荐

Refresh: int_fligh.

Select * from zflight into int_fligh.

Append int_fligh. Clear int_fligh.

Endselect.

推荐

Refresh: int_fligh.

Select * from zflight into table int_fligh.

5、使用批量修改内表代替逐行修改

不推荐

Loop at int_fligh.

If int_fligh-flag is initial.

Int_fligh-flag = ‘X’.

Endif.

Modify int_fligh.

Endloop.

推荐

Int_fligh-flag = ‘X’.

Modify int_fligh transporting flag where flag is initial.

6、使用二分法查询,提高查询内表数据速度

不推荐

Read table int_fligh with key airln = ‘LF’.

推荐

Read table int_fligh with key airln = ‘LF’ binary search.

SAP ABAP 性能优化技巧 — 使用二分查找(Binary Search)选项

READ命令使用顺序查找数据表,这会降低处理速度。取而代之,使用binary search的附加命令,可以使用二分查找算法,可以帮助加快内表查找速度。
在使用binary search之前必须首先将内表排序,否则有可能找不到记录,因为二分查找反复将查找区间对半划分,如果要查找的值小于查找区间的中间位置的数据项值,则查找区间将缩小到前半个区间,否则查找将局限于后半区间.

不推荐使用:

Read
table int_fligh with key airln = ‘LF’.

推荐使用:

SORT
int_fligh by airln.

Read table int_fligh with key airln = ‘LF’ binary search.

应用:

with key 后面不能使用比较符 < >.

read table itab with key matnr = lt_mseg_n-matnr

pvprs > 0 . 这种写法不对。

可以变通的写这条语句。

LOOP at lt_ckmlcr WHERE matnr = lt_mseg_n-matnr AND pvprs > 0.

.........

exit.

endloop.

7、两个内表添加使用批量增加代替逐行

不推荐

Loop at int_fligh1.

Append int_fligh1 to int_fligh2.

Endloop.

推荐

Append lines of int_fligh1 to int_fligh2.

8、 使用FOR ALL Entries

不推荐

Loop at int_cntry.

Select single * from zfligh into int_fligh where cntry = int_cntry-cntry.

Append int_fligh.

Endloop.

推荐

Select * from zfligh appending table int_fligh

For all entries in int_cntry

Where cntry = int_cntry-cntry.

9、使用sort by 代替order by

10、避免使用SELECT DISTINCT语句

使用的 ABAP SORT + DELETE ADJACENT DUPLICATES 代替.

11、两个实例

DATA: BEGIN OF it_mara OCCURS 0,

matnr LIKE mara-matnr,

maktx LIKE makt-maktx,

END OF it_mara.

第一种写法:

Select matnr

INTO it_mara

FROM mara.

APPEND it_mara.

ENDSelect.

第二种写法(high performace):

Select matnr

INTO TABLE it_mara

FROM mara.

==========================================

DATA: BEGIN OF it_mara OCCURS 0,

matnr LIKE mara-matnr,

maktx LIKE makt-maktx,

END OF it_mara.

DATA: BEGIN OF it_makt OCCURS 0,

matnr LIKE mara-matnr,

maktx LIKE makt-maktx,

END OF it_makt.

第一种写法:

LOOP AT it_mara.

Select SINGLE maktx

INTO it_mara-maktx

FROM makt

Where matnr = it_mara-matnr AND

spras = sy-langu.

MODIFY it_mara TRANSPORTING maktx.

ENDLOOP.

第二种写法(high performace)

Select matnr maktx

INTO TABLE it_makt

FROM makt

FOR ALL ENTRIES IN it_mara

Where matnr = it_mara-matnr and

spras = sy-langu.

=========================================

1 数据——>工作区,工作区——>内表,

2 数据——>内表

很明显少了一个过程 效率自然高了 如果数据量越大,效果是可想而知的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: