不同类型的ABAP内表读写性能比较
时间:2022-07-23
本文章向大家介绍不同类型的ABAP内表读写性能比较,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
I construct three internal tables with different table types:
The complete test source code could be found in the end part of the blog.
insert operation comparison
The hashed table is least efficient since additional overhead is paid to maintain the internal administrative information for hash logic. The standard table is fastest due to the fact that there is no overhead.
read operation comparison
The standard table read is slowest due to o(n) complexity.
If we exclude the standard table read and compare the left three, it is clear the hashed table read is most efficient.
The complete test source code:
REPORT z.
PARAMETERS: count TYPE i OBLIGATORY DEFAULT 1000.
TYPES: BEGIN OF ty_pair,
key TYPE i,
value TYPE string,
END OF ty_pair.
TYPES: tt_standard TYPE STANDARD TABLE OF ty_pair WITH KEY key,
tt_sorted TYPE SORTED TABLE OF ty_pair WITH UNIQUE KEY key,
tt_hashed TYPE HASHED TABLE OF ty_pair WITH UNIQUE KEY key.
DATA: lv_start TYPE i,
lv_end TYPE i,
lt_standard TYPE tt_standard,
lt_sorted TYPE tt_sorted,
lt_hashed TYPE tt_hashed,
lv_size TYPE i.
START-OF-SELECTION.
lv_size = count.
PERFORM insert_standard.
PERFORM insert_sorted.
PERFORM insert_hashed.
PERFORM read_standard.
PERFORM read_standard_binary.
PERFORM read_sorted.
PERFORM read_hashed.
FORM insert_standard.
PERFORM start_timer.
DO lv_size TIMES.
DATA(line) = VALUE ty_pair( key = sy-index value = sy-index ).
APPEND line TO lt_standard.
ENDDO.
PERFORM stop_timer.
" WRITE: / 'standard table insertion: ' , lv_end.
ENDFORM.
FORM insert_sorted.
PERFORM start_timer.
DO lv_size TIMES.
DATA(line) = VALUE ty_pair( key = sy-index value = sy-index ).
INSERT line INTO TABLE lt_sorted.
ENDDO.
PERFORM stop_timer.
" WRITE: / 'sorted table insertion: ' , lv_end.
ENDFORM.
FORM insert_hashed.
PERFORM start_timer.
DO lv_size TIMES.
DATA(line) = VALUE ty_pair( key = sy-index value = sy-index ).
INSERT line INTO TABLE lt_hashed.
ENDDO.
PERFORM stop_timer.
" WRITE: / 'hashed table insertion: ' , lv_end.
ENDFORM.
FORM read_standard.
PERFORM start_timer.
DO lv_size TIMES.
READ TABLE lt_standard ASSIGNING FIELD-SYMBOL(<standard>) WITH KEY key = sy-index.
ASSERT sy-subrc = 0.
ENDDO.
PERFORM stop_timer.
WRITE:/ 'standard table read: ', lv_end.
ENDFORM.
FORM read_standard_binary.
SORT lt_standard BY key.
PERFORM start_timer.
DO lv_size TIMES.
READ TABLE lt_standard ASSIGNING FIELD-SYMBOL(<standard>) WITH KEY key = sy-index BINARY SEARCH.
ASSERT sy-subrc = 0.
ENDDO.
PERFORM stop_timer.
WRITE:/ 'standard table binary read: ', lv_end.
ENDFORM.
FORM read_sorted.
PERFORM start_timer.
DO lv_size TIMES.
READ TABLE lt_sorted ASSIGNING FIELD-SYMBOL(<sorted>) WITH KEY key = sy-index.
ASSERT sy-subrc = 0.
ENDDO.
PERFORM stop_timer.
WRITE:/ 'sorted table read: ', lv_end.
ENDFORM.
FORM read_hashed.
PERFORM start_timer.
DO lv_size TIMES.
READ TABLE lt_hashed ASSIGNING FIELD-SYMBOL(<sorted>) WITH TABLE KEY key = sy-index.
ASSERT sy-subrc = 0.
ENDDO.
PERFORM stop_timer.
WRITE:/ 'hashed table read: ', lv_end.
ENDFORM.
FORM start_timer.
CLEAR: lv_start, lv_end.
GET RUN TIME FIELD lv_start.
ENDFORM.
FORM stop_timer.
GET RUN TIME FIELD lv_end.
lv_end = lv_end - lv_start.
ENDFORM.
- Spring Boot - Profile不同环境配置
- $.each()与$(selector).each()区别详解
- javascript typeof
- php中json_encode
- Java高级进阶:自定义ClassLoader
- 字符串拼接+和concat的区别
- Spring Boot Runner启动器
- Spring Boot自动配置原理、实战
- Spring Aware容器感知技术
- 深入探究frame和bounds的区别以及setbounds使用
- 如何生成二维码过程详解
- hashCode和identityHashCode的区别你知道吗?
- SpringCloud注册中心高可用搭建
- SpringMVC表单验证器的使用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 亿及流量多级缓存 - 客户端缓存
- 亿及流量多级缓存 - 一致性哈希负载均衡与模板渲染
- 关于友情链接或者其他外部链接的建议
- 总结Js方法工具类库,总有你需要的方法
- [docker]安装Mysql
- [Centos7]linux运行django项目报错no module named _ssl
- [Centos7]在非标准端口上运行SSH
- [Centos7]安装及配置bind(DNS服务)
- [Centos7.2]关于crontab报错
- [Centos7.2]关于升级python后防火墙无法启动
- [Centos7]关于限制IP通过ssh登陆
- Apache安装SSL证证书
- 打卡群刷题总结0717——不同路径 II
- [Centos7.2]Django挂载后台运行
- [Centos7+python3]IPy模块安装