With KEY & With Table KEY 的使用

leniz發表於2009-05-13
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

那麼我們真正關注的是內表的訪問效率問題。訪問表可以用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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章