With KEY & With Table KEY 的使用
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- el-table 的 el-table-column 的key使用Math.random() 篩選列random
- Github deploy key使用Github
- MyIsam 表 “ Incorrect key file for table 't_ '; try to repair it”AI
- mysql中key 、primary key 、unique key 與index區別MySqlIndex
- Redis熱點key大keyRedis
- SSH key使用總結
- Flutter Key的原理和使用 (一) 沒有Key會發生什麼Flutter
- MYSQL報1022錯誤:Can't write;duplicate key in table '.....'MySql
- 今天測試了一下update partition table的part key
- vue v-for中key的作用,使用index作為key會怎麼樣?VueIndex
- on duplicate key update簡單使用
- 工作294:for[item.key]使用
- element-plus table部分列根據介面返回key展示
- 大Key
- 熱Key
- Specified key was too long; max key length is 1000 bytes
- Vue進階(么伍么):el-table-column :key應用Vue
- COCOs2dx中KEY_KP與KEY的區別
- Flutter Key的原理和使用(五) 需要key的例項:可拖動改變順序的ListviewFlutterView
- Flutter中的Key(一)Flutter
- Flutter中的Key(二)Flutter
- Vue中key的作用Vue
- sessionStorage.key()Session
- python sorted keyPython
- 如何處理redis叢集中hot key和big keyRedis
- MySQL 關於 INSERT INTO...ON DUPLICATE KEY UPDATE 的使用MySql
- Json中使用中文作為key的風險JSON
- Missing key(s) in state_dict: Unexpected key(s) in state_dict
- Redis之key的淘汰策略Redis
- Redis命令——鍵(key)Redis
- GitLab配置ssh keyGitlab
- Mysql Key Buffer SizeMySql
- Flutter : 關於 KeyFlutter
- uniapp 使用 picker 的 range-key 不生效問題APP
- 偶遇ERROR 1071 (42000): Specified key was too long; max key length is 767 bytesError
- MySQL執行語句報Incorrect key file for table '/tmp/#sql_.MYI'; try to repair itMySqlAI
- 關於git的ssh-key:解決本地多個ssh-key的問題Git
- python 字典修改鍵(key)的方法Python
- PHP 對 Redis key 值的操作PHPRedis