•尽量使用SELECT…INTO TABLE tab ,避免使用SELECT*
•不要使用SELECT…ENDSELECT语句;
•所需的数据时来自簇表BSEG时,可使用透明表代替。
•尽量避谨散免在LOOP 中访问数据库,可以再之前先将数据取到内表,然后在LOOP中使用二分法查找READ TABLE tab WITH KEY ….BINARY SEAECH。
•尽可能氏含多地指定WHERE语句,并且在同等条件下把包含等号的查询条件放在前面。•汇总数据时,尽量使用COLLECT…INTO…。
•删祥核氏除重复项时,避免使用SELECTDISTINCT,可以先用SORT将内表排序,然后用DELETE ADJACENT DUPLICATES FROM….COMPARING.••排序时,尽量用SORT代替ORDERBY.
定义一个内表,然后按照内表中的字段进行select into到内表中。例如:data:begin of gt_data occurs 0,
matnr like mard-matnr,
werks like mard-werks,
lgort like mard-lgort,
labst like mard-labst,
end of gt_data.
上面的表示一个内表gt_data定义出来了。然后我们在把对应的数据提取出来,
select matnr
werks
lgort
labst
into table gt_data
from mard
where werks = '1100'.
这样的话,数据就会按照物料号、工厂、库存地点、非限制库存 提取放到内表gt_data中了。
也可以写成:
select *
into corresponding fields of table gt_data
from mard
where werks = '1100'.
上面的这两种sql语句的册春历区别在于: 第一种程序会只针对matnr werks lgort labst 这四个字段去提取数据,第二种,程序会提取mard表中所有字段,然后按照matnr werks lgort labst 来mapping上去。 相对效率而言,第一种效率好些。
至于程序森枝优化上面,尽量减少对数据库的访问,尽量避州搜开那几个大表,比如 mseg ,bseg 等这类的表。 尽量把数据放在内存中计算, 别的倒也没什么了,其实在内表上关于一些sort table 和 hash table 来说,虽然在速度上会快一些(“比如在处理几十万条数据”),如果在几万到十几万条数据的话,性能上其实没什么太大的变化,但是在后期程序修改上,会比较的麻烦一点,一般这种内表我们只是运用在比较大的表上用。OK。说完了。就这样吧。
程序效率优化腔颂的重点:降低CPU负载
降低数据库负载(减少IO *** 作)
内存使用的优化桐键
减低CPU负载:
1. 使用WHERE条件减少循环次数。
即推荐:
LOOP AT itab WHERE vbeln IN s_vbeln.
ENDLOOP.
不推荐:LOOP AT itab. IF. ENDIF. ENDLOOP.
2. 尽量避免使用MOVE-CORRESPONDING和INTO CORRESPONDING FIELDS OF。
CORRESPONDING语句在系统内部存在隐式 *** 作:
1). 检查元素名称匹配;
2). 检查元素类型匹配;
3). 元素类型转换;
3. 使用SORTED TABLE 和 HASHED TABLE 表类型。
1). SORTED TABLE定义:
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一族地址连续的存储单元一次存储数据元素的伍轮郑线性结构。线性表采用顺序存储的方式存储就称之为顺序
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)