ABAP 辨析 标准表|排序表|哈希表

时间:2020-12-30 00:37:44

1、文档介绍

本文档将介绍内表的区别和用法,涉及标准表、排序表、哈希表

2、用法与区别

2.1、内表种类

内表顶层为任意表,任意表分为索引表和哈希表,索引表又可分为标准表和排序表,结构如图:

ABAP 辨析 标准表|排序表|哈希表

2.2、内表用法

2.2.1、标准表

说明:标准表的每一行会有一个逻辑索引,查找数据时,可以通过关键字或索引进行查找;添加数据时,可通过索引添加到具体位置,也可以默认添加到最后

对表进行插入、删除等操作时,各数据行在内存中的位置不变,系统仅重新排列各数据行的索引值。

语法:STANDARD TABLE,现在ABAP版本可以省略STANDARD 关键字,默认定义的内表即为标准表

DATA:lt_ekpo TYPE STANDARD TABLE OF ty_ekpo.

定义关键字段:默认为本行非数字,非内表的字段为关键字。

WITH NON-UNIQUE KEY ebeln ebelp.定义关键字(非必要)

DATA:lt_ekpo TYPE STANDARD TABLE OF ty_ekpo WITH NON-UNIQUE KEY ebeln ebelp.

         NON-UNIQUE | UNIQUE :(非特有|特有)代表内表中定义的关键字的数据行是否能重复出现,UNIQUE代表相同关键字字段的行不能重复出现。因为标准表允许出现重复数据,因此,标准表中不允许使用UNIQUE KEY。

读取效率:消耗时间随表行数呈线性增长。

2.2.2、排序表

说明:每行数据也具有一个逻辑索引,并且总是按其关键字升序排序后再进行存储,其访问方式与标准表相同。   

语法:SORTED TABLE

DATA:lt_sort TYPE SORTED TABLE OF ty_ekpo WITH NON-UNIQUE KEY ebeln ebelp.

定义关键字段:可使用NON-UNIQUE | UNIQUE

读取效率:系统使用二分法查找,消耗时间随表行数呈对数级增长。

2.2.3、哈希表

说明:没有索引,只能通过关键字来访问。

语法:HASHED TABLE

DATA:lt_hash TYPE HASHED TABLE OF ty_ekpo WITH UNIQUE KEY ebeln ebelp.

定义关键字段:哈希表关键字对应的行不允许重复,因此只能使用UNIQUE

读取效率:系统用哈希算法管理表中的数据,因此查询一行数据的时间和表的行数无关。

2.2.4、访问方式

ABAP 辨析 标准表|排序表|哈希表

 根据数据预计的行数和访问频率,来决定使用什么类型的内表:

1、数据量少于100行,很少使用关键字操作,使用标准表没效率问题;

2、运行期间必须以某种排序形式出现的内表,使用排序表;

3、数据量较大,且不存在重复行,只需要使用关键字访问的内表,则定义哈希表;