本帖最后由 SAPOK_ABAP 于 2015-6-26 16:42 编辑
内表中数据的遍历常用LOOP,内表数据的单笔查询常用READ TABLE;下面我们主要看内表数据的单笔查询。对于标准
内表来说,单笔查询时如果不加任何的算法,如:
READ TABLE IT_TAB INTO WA_TAB WITH KEY MATNR = L_MATNR.
开始匹配 | MATNR1 | | MATNR2 | | ... | | ... | | ... | | ... | | MATNR20 | | MATNR20 |
运算时,系统会从内表的第一笔数据开始根据条件比对,如果条件成立,查询即可结束,范围SY-SUBRC = 0和查询结果;
如果失败,指针向下移动一位,继续匹配。从上面可看出若不加任何算法,当数据量很大时,该语句匹配的次数很多,性能很差。
相反,若通过二分法查找,如:
READ TABLE IT_TAB INTO WA_TAB WITH KEY MATNR = L_MATNR BINARY SEARCH.
| MATNR1 | | MATNR2 | | ... | 开始匹配 | ... | | ... | | ... | | MATNR20 | | MATNR21 |
匹配次数会大大减少;二分法又称折半查找法,查询时不是从第一笔开始匹配数据,而是从中间匹配,根据匹配结果判断要
查询的数据在折半的前一半还是后一半,系统会判断中间值与目标的大小关系;中间值>目标值,则指针转向前一半继续查询;
中间值<目标值,则指针转向后一半继续查询,依次找到数据。
这种查找方法,对数据的格式有严格的要求,从上面的过程可看到,数据必须按排序,而且必须是升序排列。至于查找次数,
数据愈多,性能提升越明显。
|