ABAP程序性能优化
2013-12-02 08:46
225 查看
程序效率优化的重点:
降低CPU负载
降低数据库负载(减少IO操作)
内存使用的优化
减低CPU负载:
1. 使用WHERE条件减少循环次数。
即推荐:
LOOP AT itab WHERE vbeln INs_vbeln.
ENDLOOP.
不推荐:LOOP AT itab. IF. ENDIF.ENDLOOP.
2. 尽量避免使用MOVE-CORRESPONDING和INTOCORRESPONDING FIELDS OF。
CORRESPONDING语句在系统内部存在隐式操作:
1). 检查元素名称匹配;
2). 检查元素类型匹配;
3). 元素类型转换;
3. 使用SORTED TABLE 和 HASHED TABLE表类型。
1). SORTED TABLE定义:
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一族地址连续的存储单元一次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的节点依次存放在计算机内存中一组地址连续的存储单元中。
DATA: it_tab TYPE SORTED TABLE OF ty_tabWITH NON-UNIQUE KEY vbeln.
2). HASHED TABLE定义:
哈希表(也叫散列表)是根据关键字值直接进行访问的数据结构,也就是说,它通过把关键字值映射到表中一个位置来访问记录,以加快查找的速度,这个映射函数叫做哈希函数,存放记录的数组叫做哈希表。
DATA: it_tab TYPE SORTED TABLE OF ty_tabWITH UNIQUE KEY vbeln.
4. 使用BINARY SEARCH 二分查找算法。
一般线性查找的缺点就是耗时,而二分查找比线性查找更高效。
时间复杂度由O(n)阶降低到 O(log n)阶
注意:BINARY SEARCH前必须进行索引按升序排序
5. 使用较高效的 DELETE ADJACENT DUPLICATESFROM 删除内表邻近重复记录。
语法:
(SORT<itab> f1 f2)
DELETE ADJACENT DUPLICATES FROM<itab> [COMPARING f1 f2...].
注意:使用前必须进行索引排序
6. 使用较高效的COLLECT语句对记录进行聚集加总。
注意:COLLECT语句的效率只体现在当你使用的是排序表和哈希表的时候,或者内表经过有效排序之后。否则当内表数据过多时,检索时间会很长,一般不推荐使用记录条数非常多的标准表。
降低数据库负载的技巧:
1. 避免SELECT ...ENDSELECT语句
SELECTENDSELECT语句其实是一个循环体,为了减少循环次数,建议使用一次性TABLE赋值。
2. 避免使用SELECT *.
取而代之的是 SELECT field list INTO...
降低CPU负载
降低数据库负载(减少IO操作)
内存使用的优化
减低CPU负载:
1. 使用WHERE条件减少循环次数。
即推荐:
LOOP AT itab WHERE vbeln INs_vbeln.
ENDLOOP.
不推荐:LOOP AT itab. IF. ENDIF.ENDLOOP.
2. 尽量避免使用MOVE-CORRESPONDING和INTOCORRESPONDING FIELDS OF。
CORRESPONDING语句在系统内部存在隐式操作:
1). 检查元素名称匹配;
2). 检查元素类型匹配;
3). 元素类型转换;
3. 使用SORTED TABLE 和 HASHED TABLE表类型。
1). SORTED TABLE定义:
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一族地址连续的存储单元一次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的节点依次存放在计算机内存中一组地址连续的存储单元中。
DATA: it_tab TYPE SORTED TABLE OF ty_tabWITH NON-UNIQUE KEY vbeln.
2). HASHED TABLE定义:
哈希表(也叫散列表)是根据关键字值直接进行访问的数据结构,也就是说,它通过把关键字值映射到表中一个位置来访问记录,以加快查找的速度,这个映射函数叫做哈希函数,存放记录的数组叫做哈希表。
DATA: it_tab TYPE SORTED TABLE OF ty_tabWITH UNIQUE KEY vbeln.
4. 使用BINARY SEARCH 二分查找算法。
一般线性查找的缺点就是耗时,而二分查找比线性查找更高效。
时间复杂度由O(n)阶降低到 O(log n)阶
注意:BINARY SEARCH前必须进行索引按升序排序
5. 使用较高效的 DELETE ADJACENT DUPLICATESFROM 删除内表邻近重复记录。
语法:
(SORT<itab> f1 f2)
DELETE ADJACENT DUPLICATES FROM<itab> [COMPARING f1 f2...].
注意:使用前必须进行索引排序
6. 使用较高效的COLLECT语句对记录进行聚集加总。
注意:COLLECT语句的效率只体现在当你使用的是排序表和哈希表的时候,或者内表经过有效排序之后。否则当内表数据过多时,检索时间会很长,一般不推荐使用记录条数非常多的标准表。
降低数据库负载的技巧:
1. 避免SELECT ...ENDSELECT语句
SELECTENDSELECT语句其实是一个循环体,为了减少循环次数,建议使用一次性TABLE赋值。
2. 避免使用SELECT *.
取而代之的是 SELECT field list INTO