【优化】关于FOR ALL ENTRIES的小结

应用场景:当for all entries in后面跟的内表很大的时候而且不包含待查询表的key值字段的时候,会大大降低程序性能效率。

分析:使用了FOR ALL ENTRIES后,相当于把驱动表里的条件字段的所有值用OR 连起来,一次对DB操作,条件语句增大,势必使内存占用增多。在后面跟的这个内表非常非常大的时候程序还可能会出现SQL_CAUGHT_RABAX”、“TSV_TNEW_BLOCKS_NO_ROLL_MEMORY的 dump,意思大概是内存不足,程序dump。


解决办法:

1、首先对for all entries in后面跟的内表itab,进行去重处理。

2、尽可能的使这个内表包含需要查询table的,主键或者索引字段,在查询时尽量按照主键或索引次序字段,写where 语句。

3、对于内表itab中作为条件的字段,不能使用LIKE,BETWEEN,IN比较操作符。因为这些比较操作符都是不确定比较操作符(将选择条件设定 在一个范围内),而FOR ALL ENTRIES IN语句的作用相当于将选择条件块全部并列开来,用OR连接,如果每个OR分支中又是不确定的范围,那么系统性能将大大降低,因此R/3系统在使用该语句 时禁止使用不确定比较操作符。

4、可以分固定条目,分次按range条件取值。减少单次内存占用量

5、使用for all entries in一定要判断,后面跟的内表itab不为空,不然相当于全表查询。

6、使用for all entries in检索出来的字段,应该包含唯一性记录相关的字段,因为for all entries in查出来的记录会默认去除重复项。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值