SAP ABAP 性能优化技巧 — 正确使用”move” 语句

建议使用move语句取代 move-corresponding 语句, 因为move-corresponding的执行速度很慢。应该尽量一次性搬移内表的整条记录,而不是一个字段一个字段的取值。move-corresponding会需要这个字段的比较域名,因此速度会很慢。 返回文章目录

SAP ABAP 性能优化技巧 — “where” 语句的正确结构

当一个基本表有多个索引的时候, where 语句中的字段顺序应该与索引的顺序一致,无论第一索引还是第二索引。 在选择一个索引的时候,优化机会检查where语句中字段名,然后选择一个与这些字段名排列顺序一致的索引。 另外一个提示就是如果一个表是以 客户端编号MANDT 开始的,而索引不是的话,则优化机很有可能不会使用那个索引。 在某些情况下,建议查看是否有新的索引可以加速程序的运行。这在访问财务表的程序中会非常实用。 如何查看索引? 要查看一个表当前有哪些可用的索引,使用SAP事务编码SE11进入数据字典,显示要查询的数据表,然后点击顶部工具条上的Indexes…按钮即可 返回文章目录

SAP ABAP 性能优化技巧 — 使用 “for all entries”

在select语句后面的where附加项中可以使用左关联,这会极大的提高程序速度,但同时也有一些局限,如下: 重复项会被从结果数据集中自动删除,因此要注意在select语句中需要给出详细的唯一关键字组合。 如果 For All Entries IN 字段修饰的内表是空表的话,源表的所有行都会被选入目标表中。因此在使用前一定要首先检查第一个表是否为空,这一点很重要,否则会有performance问题。 如果 For All Entries IN 字段修饰的内表很大的话,程序速度反而会减慢,而不是加快。因此应该尽量使该表的数据量控制在一个适当的大小。 不推荐使用: Loop at int_cntry. Select single * from zfligh into int_fligh where cntry = int_cntry-cntry. Append int_fligh. Endloop. 推荐使用: IF NOT int_cntry[] IS INITIAL.   Select * from zfligh appending table int_fligh For all entries in int_cntry Where cntry = int_cntry-cntry. ENDIF. […]

SAP ABAP 性能优化技巧 — 缓存表

推荐使用缓存表因为它可以显著提高程序速度。但是使用以下语句的时候缓存表会被跳过: Select distinct Select … for update Order by, group by, having字段 Joins 在 select 命令后面使用 bypass buffer 附加语句可以明确跳过缓存表。 返回文章目录

SAP ABAP 性能优化技巧 — 向内表添加纪录

与其使用一般的 loop-endloop 方法来实现向内表添加多条记录,不如使用 append 命令的变体将一个内表的所有记录一次性添加入另一个内表。要注意的是两个内表的结构定义必须完全一样。 不推荐使用: Loop at int_fligh1. Append int_fligh1 to int_fligh2. Endloop. 推荐使用: Append lines of int_fligh1 to int_fligh2. 返回文章目录

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. 返回文章目录

SAP ABAP 性能优化技巧 – 修改一组纪录

修改一个内表的多行纪录 使用modify命令的不同形式加快这种操作的处理速度。 不建议使用: 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. 返回文章目录

SAP ABAP 性能优化技巧 –- “into table” 语句

使用select 命令的 into table语句 与其一行一行的读取数据添加入内表,不如一次性取出所有数据行。 不建议使用: 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. 返回文章目录

SAP ABAP 性能优化技巧 – 视图取代基本表

使用视图取代基本表 很多时候 ABAP 程序员需要使用基本表和嵌套的选择。其实我们应该查看一下是否有SAP已经提供的这些基本表的某些视图可供使用,以便直接获得想要的数据,而不用特别编写代码来获取。 不建议使用: 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. 返回文章目录

SAP ABAP 性能优化技巧 — 集合函数

可以使用ABAP提供的集合函数取代ABAP代码来获得最大或最小值。 不建议使用: 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’. 其它可用集合函数还有 min (最小值), avg (平均值), sum (求和) and count (数据选择的行数). 返回文章目录