二维码

[基础语法] ABAP基础语法中的三种内表

Twilight发表于 2016-04-21 16:56Twilight 最后回复于 2016-04-21 16:56 [复制链接] 4401 0

ABAP里提供了三种内表,分别是标准表(Standard Table),排序表(Sorted Table)和哈希表(Hashed Table)。READ TABLE查找数据时,三种内表的效率不同。

标准表:
  • 可以不指定KEY,但只能指定 NON-UNIQUE KEY
  • 可以使用INDEX和KEY来查询

注:NON-UNIQUE KEY代表内表里该字段可以重复,如果是UNIQUE KEY则代表该字段不能重复,不然往内表里插入重复KEY时会发生运行时错误。

举例:DATA gt_syl TYPE STANDARD TABLE OF vbap WITH NON-UNIQUE KEY vbeln.

排序表:
  • 必须指定KEY作为排序参考字段,可以指定UNIQUE KEY或者是NON-UNIQUE KEY
  • 可以使用INDEX和KEY来查询
  • 已经按照KEY排序,不可以再排序

举例:DATA gt_syl TYPE SORTED TABLE OF vbap WITH NON-UNIQUE KEY vbeln.

哈希表:
  • 必须指定KEY,并且是UNIQUE KEY
  • 不可以使用INDEX查询
  • 查询时间和记录数无关

哈希表的最大特点是查询时间和记录数无关,是个固定值。

举例:DATA gt_syl TYPE HASHED TABLE OF vbap WITH UNIQUE KEY vbeln.

Standard TableProcessed mainly by Index Operation
Key is always non-unique
Can be filled very quickly
Sorted TableAccess mainly by a Fixed Key (efficient)
Index operation seldom
The response time for key access is logarithmically proportional to the number of table entries
Key can be unique or non-unique
Data is inserted as per key
Hashed TableAccess only by key (fast)
Key must be unique
No index operation
The response time is independent of the number of table entries,and is constant, since the system access the table entries using a hash algorithm


标准表是最常用的表,但在内表记录条数很多时,对排序表查询的效率明显比标准表高,因为系统对标准表是进行顺序查询的,而对排序表是进行二分查询的。
可以对标准表用SORT先进行排序,然后再进行BINARY SEARCH(即二分法查找)的查询,效率上基本等同于排序表,不过排序本身也是消耗时间。

排序表比起标准表的主要好处是它在程序里任何时候都是排序过的,如果某个内表主要是用来查询的,不需要修改,那么这时建议使用排序表。

除上面三种标准类型外,还有一般性类型,即索引表(INDEX TABLE)和任意表(ANY TABLE)。
一般性类型可以用于类型定义中,但不能用于声明一个内表对象,因为它并没有指明任何明确的表类型,因而系统无法确定对其操作方式。一般性类型还可以用于指明字段符号和接口参数的类型,其实际类型可能在运行期内才能够确定。
inner_table.jpg
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表