With KEY & With Table KEY 的使用
在做闡述之前,我覺得有必要了解一下KEY。
ABAP的內表和我們真正的DB 表是類似的,有結構有欄位,但是在處理Key上DB表顯得更為隨意,可以要也可以不要,
而內表如果沒有顯式聲明,會將內表中的所有非數值欄位的欄位都作為KEY,當然也可以顯式聲明KEY。
With- 這種結構用的地方主要就是在內表的處理上,包括DELETE,READ.
READ 可以用WITH KEY 或者WITH TABLE KEY,但是DELETE只能用WITH TABLE KEY
語法結構如下:
1.
DELETE / READ itab - table_key
Syntax
... { WITH TABLE KEY {comp_name1|(name1)} = dobj1
{comp_name2|(name2)} = dobj2
... } ... .
2.
READ – table free key
Syntax
READ TABLE itab { { WITH KEY dobj }
| { WITH KEY = dobj [BINARY SEARCH] } } RESULT
1.
DELETE / READ itab - table_key
Syntax
... { WITH TABLE KEY {comp_name1|(name1)} = dobj1
{comp_name2|(name2)} = dobj2
... } ... .
2.
READ – table free key
Syntax
READ TABLE itab { { WITH KEY dobj }
| { WITH KEY = dobj [BINARY SEARCH] } } RESULT
那么我們真正關注的是內表的訪問效率問題。訪問表可以用WITH KEY 或WITH KEY - BINARY SEARCH
或 WITH TABLE KEY,那么各種語法的效率如何?
分析這個問題,我們必須了解一下表的訪問方式有那些。目前內表的訪問,主要有Index、Binary Search(二元法)、
線性、Hash算法等。
內表的訪問和內表的類型有直接的關係,具體情況如下:
Standard Table:線性訪問
Sorted Table :Binary Search
Hashed Table :Hash算法
說了那么多,此篇的重點就是要講,我們在使用Standard Table時,如果用訪問表,使用With Key或With Table Key的效率
都會比 With key --- Binary Search 差,因為前面兩個都是采用線性方式,With Table key 很多人會理解成DB的INDEX訪問,
那么在理解內表的時候就要稍微變通一下。如果使用的是Sorted table 則默認使用Binary Search,你也可以在語法中
加Binary Search 但是加不加都是一樣的效果。
最後還有一些疑問沒有找到原因:
1. With table key 為什么不可以使用 binary search
2. with table key 和 with key的區別是否就是前者要求的唯一性
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/554557/viewspace-594969/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/554557/viewspace-594969/