不同类型的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.
- hdu-----(2807)The Shortest Path(矩阵+Floyd)
- hdu----(4686)Arc of Dream(矩阵快速幂)
- HDU----(4549)M斐波那契数列(小费马引理+快速矩阵幂)
- Centos系统修改时区
- zookeeper思考与总结1:在其它组件的作用及hdfs对比
- HDU----(4291)A Short problem(快速矩阵幂)
- Linux下删除指定文件之外的其他文件
- HDU----(2157)How many ways??(快速矩阵幂)
- 试试Linux下的ip命令
- hdu---(2604)Queuing(矩阵快速幂)
- centos7下卸载python后yum不能使用的恢复方法
- hdu---(5038)Grade(胡搞)
- shell生成随机字符的几种方法
- Python时间获取及转换
- 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 数组属性和方法
- python如何删除文件、目录
- pytorch实现查看当前学习率
- python3.x中安装web.py步骤方法
- pytorch 网络参数 weight bias 初始化详解
- PHP中单例模式的使用场景与使用方法讲解
- pytorch查看模型weight与grad方式
- php+ajax 文件上传代码实例
- PHP将整数数字转换为罗马数字实例分享
- PHP如何通过表单直接提交大文件详解
- PHP基于openssl实现的非对称加密操作示例
- python图片验证码识别最新模块muggle_ocr的示例代码
- virtualenv介绍及简明教程
- Keras 数据增强ImageDataGenerator多输入多输出实例
- TensorFlow中如何确定张量的形状实例
- 使用Dajngo 通过代码添加xadmin用户和权限(组)