介紹(一)
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行的內表,且很少使用關鍵字操作,則使用標准表沒有效率問題;數據量
比較巨大,切不存在重復行,只需使用關鍵字訪問的內表應定義為哈希表;排序表適用於運行
期內必須以某種排序形式出現的內表。