【优化】大数据量内表优化技巧
2017-04-25 22:46
162 查看
应用场景:在优化过程中我们经常会碰到处理数据量上百万或者千万大数据内表的情况,本例介绍的是一种通过tabix减少读取数据量的思想。
注意事项: 1、首先需要排序
2、先通过二分查找read内表的方式找到我们数据所在的index
3、将sy-tabix赋给变量
4、通过 loop at itabinto wa_itab from l_v_tabix
Endloop,的方式指定读取的开始位置。
DATA: l_v_trans_idx TYPE sy-tabix,
l_v_trans_idx1 TYPE sy-tabix.
SORT l_i_trans BY bukrs kunnr agrid budat DESCENDING.
LOOP AT l_i_trans ASSIGNING <fs_trans>.
CLEAR l_v_balance.
l_v_balance = <fs_trans>-sp_balance.
READ TABLE fp_i_trans TRANSPORTING NO FIELDS
WITH KEY bukrs = <fs_trans>-bukrs
kunnr = <fs_trans>-kunnr
agrid = <fs_trans>-agrid BINARY SEARCH.
IF sy-subrc = 0.
MOVE sy-tabix TO l_v_trans_idx.
LOOP AT fp_i_trans INTO l_wa_trans FROM l_v_trans_idx.
IF l_wa_trans-bukrs <> <fs_trans>-bukrs OR
l_wa_trans-kunnr <> <fs_trans>-kunnr OR
l_wa_trans-agrid <> <fs_trans>-agrid.
EXIT.
ENDIF.
IF l_wa_trans-budat <= <fs_trans>-budat AND
l_wa_trans-ttype = c_ttype1 AND
l_wa_trans-sp_balance > 0.
l_v_balance = l_v_balance + l_wa_trans-sp_balance.
IF l_v_balance >= 0.
l_wa_trans-sp_balance = l_v_balance.
MODIFY fp_i_trans FROM l_wa_trans.
EXIT.
ELSE.
l_wa_trans-sp_balance = 0.
MODIFY fp_i_trans FROM l_wa_trans.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
* 后进后出法对冲负数发放数据
SORT l_i_trans_ff BY bukrs kunnr agrid budat DESCENDING.
LOOP AT l_i_trans_ff ASSIGNING <fs_trans>.
CLEAR l_v_balance.
l_v_balance = <fs_trans>-ff_balance.
READ TABLE fp_i_trans TRANSPORTING NO FIELDS
WITH KEY bukrs = <fs_trans>-bukrs
kunnr = <fs_trans>-kunnr
agrid = <fs_trans>-agrid BINARY SEARCH.
IF sy-subrc = 0.
MOVE sy-tabix TO l_v_trans_idx1.
LOOP AT fp_i_trans INTO l_wa_trans FROM l_v_trans_idx1.
IF l_wa_trans-bukrs <> <fs_trans>-bukrs OR
l_wa_trans-kunnr <> <fs_trans>-kunnr OR
l_wa_trans-agrid <> <fs_trans>-agrid.
EXIT.
ENDIF.
IF l_wa_trans-budat <= <fs_trans>-budat AND
l_wa_trans-ttype <> c_ttype1 AND
l_wa_trans-ff_balance > 0.
l_v_balance = l_v_balance + l_wa_trans-ff_balance.
IF l_v_balance >= 0.
l_wa_trans-ff_balance = l_v_balance.
MODIFY fp_i_trans FROM l_wa_trans.
EXIT.
ELSE.
l_wa_trans-ff_balance = 0.
MODIFY fp_i_trans FROM l_wa_trans.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
注意事项: 1、首先需要排序
2、先通过二分查找read内表的方式找到我们数据所在的index
3、将sy-tabix赋给变量
4、通过 loop at itabinto wa_itab from l_v_tabix
Endloop,的方式指定读取的开始位置。
DATA: l_v_trans_idx TYPE sy-tabix,
l_v_trans_idx1 TYPE sy-tabix.
SORT l_i_trans BY bukrs kunnr agrid budat DESCENDING.
LOOP AT l_i_trans ASSIGNING <fs_trans>.
CLEAR l_v_balance.
l_v_balance = <fs_trans>-sp_balance.
READ TABLE fp_i_trans TRANSPORTING NO FIELDS
WITH KEY bukrs = <fs_trans>-bukrs
kunnr = <fs_trans>-kunnr
agrid = <fs_trans>-agrid BINARY SEARCH.
IF sy-subrc = 0.
MOVE sy-tabix TO l_v_trans_idx.
LOOP AT fp_i_trans INTO l_wa_trans FROM l_v_trans_idx.
IF l_wa_trans-bukrs <> <fs_trans>-bukrs OR
l_wa_trans-kunnr <> <fs_trans>-kunnr OR
l_wa_trans-agrid <> <fs_trans>-agrid.
EXIT.
ENDIF.
IF l_wa_trans-budat <= <fs_trans>-budat AND
l_wa_trans-ttype = c_ttype1 AND
l_wa_trans-sp_balance > 0.
l_v_balance = l_v_balance + l_wa_trans-sp_balance.
IF l_v_balance >= 0.
l_wa_trans-sp_balance = l_v_balance.
MODIFY fp_i_trans FROM l_wa_trans.
EXIT.
ELSE.
l_wa_trans-sp_balance = 0.
MODIFY fp_i_trans FROM l_wa_trans.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
* 后进后出法对冲负数发放数据
SORT l_i_trans_ff BY bukrs kunnr agrid budat DESCENDING.
LOOP AT l_i_trans_ff ASSIGNING <fs_trans>.
CLEAR l_v_balance.
l_v_balance = <fs_trans>-ff_balance.
READ TABLE fp_i_trans TRANSPORTING NO FIELDS
WITH KEY bukrs = <fs_trans>-bukrs
kunnr = <fs_trans>-kunnr
agrid = <fs_trans>-agrid BINARY SEARCH.
IF sy-subrc = 0.
MOVE sy-tabix TO l_v_trans_idx1.
LOOP AT fp_i_trans INTO l_wa_trans FROM l_v_trans_idx1.
IF l_wa_trans-bukrs <> <fs_trans>-bukrs OR
l_wa_trans-kunnr <> <fs_trans>-kunnr OR
l_wa_trans-agrid <> <fs_trans>-agrid.
EXIT.
ENDIF.
IF l_wa_trans-budat <= <fs_trans>-budat AND
l_wa_trans-ttype <> c_ttype1 AND
l_wa_trans-ff_balance > 0.
l_v_balance = l_v_balance + l_wa_trans-ff_balance.
IF l_v_balance >= 0.
l_wa_trans-ff_balance = l_v_balance.
MODIFY fp_i_trans FROM l_wa_trans.
EXIT.
ELSE.
l_wa_trans-ff_balance = 0.
MODIFY fp_i_trans FROM l_wa_trans.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
相关文章推荐
- 大数据量查询的优化技巧
- sql大数据量查询的优化技巧
- MSSQL Sever大数据量的查询优化技巧
- mysql大数据量分页查询方法及其优化
- 不得不使用的百度快照优化seo技巧
- 上周技术关注:Flickr的开发者的Web应用优化技巧
- Eclipse 2015优化技巧
- 你不可不知的HTML优化技巧
- 使用CSS六个优化的技巧
- 优化 SQL SELECT 语句性能的技巧
- 百万数据查询优化技巧三十则
- MyEclipse 2015优化技巧
- Javascript优化技巧(文件瘦身篇)
- "爱说说"技术原理:前端Javascript优化技巧(四)
- 优化移动搜索的三个技巧
- DSP6000的几个简单优化技巧
- java代码性能优化技巧
- Unity3D中使用Profiler精确定位性能热点的优化技巧
- Oracle SQL性能优化技巧大总结
- 百万数据查询优化技巧三十则