ABAP 三类内表
介绍(一)
ABAP里提供了三种内表,分别是:
1, STANDARD TABLE 与TYPE TABLE OF 效果一样,都是标准表
2, SORTED TABLE
3, HASHED TABLE
在不同的场合下,READ TABLE查找数据时三种内表会有不同的效率。
STANDARD TABLE是标准表,也是最常用的内表,特点如下:
1, 可以不指定KEY,但只能指定 NON-UNIQUE KEY
2, 可以使用INDEX和KEY来查询
注:NON-UNIQUE KEY代表内表里该字段可以重复,如果是UNIQUE KEY则代表该字段不能重复,不然程序会发生运行时错误。
举例:DATA IT_YM TYPE STANDARD TABLE OF VBAP WITH NON-UNIQUE KEY VBELN.
SORTED TABLE是排序表,特点如下:
1, 必须指定KEY(作为排序参考字段),可以指定UNIQUE KEY或者是NON-UNIQUE KEY
2, 可以使用INDEX和KEY来查询
3, 已经按照KEY排序,不可以再排序
举例:DATA IT_YM TYPE SORTED TABLE OF VBAP WITH NON-UNIQUE KEY VBELN.
在记录条数多时,SORTED TABLE查询效率明显比STANDARD TABLE高,因为对已经排序的表可以进行二分法查找。
可以对STANDARD TABLE用SORT语句先进行排序,然后再进行BINARY SEARCH(即二分法查找)的查询,效率接近SORTED TABLE。
但要注意,排序本身也是消耗时间,如果只对STANDARD TABLE进行一次查询,则没有必要先排序后进行BINARY SEARCH的查找。
另外在使用BINARY SEARCH时,数据必须完全依照BINARY SEARCH的KEY字段进行排序。
HASHED TABLE是哈希表,特点如下:
1, 必须指定KEY,并且是UNIQUE KEY
2, 不可以使用INDEX查询
3, 查询时间和记录数无关
举例:DATA IT_YM TYPE HASHED TABLE OF VBAP WITH UNIQUE KEY VBELN.
介绍(二)
三种内表
标准表的每一行对应一个逻辑索引-SY-TABIX,填充内表的时候,可以将数据附加在现有行
之后,也可以插入到指定的位置,程序对内表行的寻址操作可通过关键字或索引进行。在对表
进行插入删除等操作时,各数据行在内存中的位置不变,系统仅重新排列各数据行的索引值。
排序表也有逻辑索引,不同的是排序表总是按其表关键字升序排列后再进行存储,也就是在
内存中的位置发生改变。
哈希表没有索引,只有关键字。
行访问方式
标准表 排序表 哈希表
索引访问 允许 允许 不允许
关键字访问 允许 允许 允许
相同值关键字行 可重复 可重复或不可重复 不可重复
推荐访问方式 主要通过索引 主要通过关键字 只能通过关键字
具体到使用什么类型的内表
对于一个小于100行的内表,且很少使用关键字操作,则使用标准表没有效率问题;数据量
比较巨大,切不存在重复行,只需使用关键字访问的内表应定义为哈希表;排序表适用于运行
期内必须以某种排序形式出现的内表。