几种内表更新方式的性能比较
ABAP程序中,内表更新主要有以下程序中的三种更新方式。一是通过字段符、二是使用索引、三是循环中直接更新。据我观察,直接使用第三种方式的人占大多数,使用字段符与使用索引的人应该差不多。这三种方式实际性能如何呢?使用字段符最快,直接更新次之,使用索引最慢。具体测试代码如下:
*@---------------------------------------------------------------------*
*@ Report ZTESTXUE23 几种内表更新的性能比较
*@ T-code
*@---------------------------------------------------------------------*
*@ Created by Xavery Hsueh(薛现军) on2013-06-29
*@
*@ Lasted Edited date:
*@---------------------------------------------------------------------*
REPORT zcor016 NO STANDARD PAGE HEADING.
************************************************************************
** 声明数据库表 Declaration ofdatabase **
************************************************************************
TABLES:coep,
coss. "
************************************************************************
** 定义结构类型 Define the structure'stype **
************************************************************************
TYPES:BEGIN OF typ_result,
vbeln TYPE vbeln,
posnr TYPE posnr,
matnr TYPE matnr,
menge TYPE menge_d,
dmbtr TYPE dmbtr,
END OF typ_result.
************************************************************************
** 定义变量与内表 Define the variants and Internaltables **
************************************************************************
DATA:gt_result TYPE TABLE OF typ_result WITH HEADER LINE.
FIELD-SYMBOLS: TYPE typ_result.
DATA:g_index TYPE sy-index.
************************************************************************
** 宏定义 Define themacro **
************************************************************************
DEFINE mcr_range.
clear &1.
&1-sign = 'I'.
&1-option = &2.
&1-low = &3.
&1-high = &4.
append &1.
END-OF-DEFINITION.
************************************************************************
** 选择屏幕 Customize theselection-screen **
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK xavery WITH FRAME TITLEtext-001.
PARAMETERS: p_box TYPE c.
SELECTION-SCREEN END OF BLOCK xavery.
************************************************************************
** 执行程序事件 Executing the program'sevents **
************************************************************************
INITIALIZATION.
PERFORM sub_init_cond.
START-OF-SELECTION.
PERFORM sub_process_cond.
PERFORM sub_test_fieldsymbol.
PERFORM sub_test_index.
PERFORM sub_test_table.
END-OF-SELECTION.
*@---------------------------------------------------------------------*
*@ Form SUB_INIT_COND
*@---------------------------------------------------------------------*
* 初始化选择条件
*----------------------------------------------------------------------*
FORM sub_init_cond .
ENDFORM. " SUB_INIT_COND
*&---------------------------------------------------------------------*
*& Form SUB_PROCESS_COND
*&---------------------------------------------------------------------*
* 给测试内表添加数据
*----------------------------------------------------------------------*
FORM sub_process_cond .
DO 200000 TIMES.
gt_result-vbeln = sy-index.
gt_result-posnr = '000010'.
APPENDgt_result.
ENDDO.
ENDFORM. " SUB_PROCESS_COND
*&---------------------------------------------------------------------*
*& Form SUB_TEST_FIELDSYMBOL
*&---------------------------------------------------------------------*
* 测试字段符的性能
*----------------------------------------------------------------------*
FORM sub_test_fieldsymbol .
CHECK p_box = '1'.
LOOP AT gt_result ASSIGNING .
-menge ='2000.000'.
-dmbtr ='1234.56'.
ENDLOOP.
WRITE:'测试完成'.
ENDFORM. " SUB_TEST_FIELDSYMBOL
*&---------------------------------------------------------------------*
*& Form SUB_TEST_INDEX
*&---------------------------------------------------------------------*
* 测试索引的性能
*----------------------------------------------------------------------*
FORM sub_test_index .
CHECK p_box = '2'.
LOOP AT gt_result.
g_index =sy-tabix.
gt_result-menge = '2000.000'.
gt_result-dmbtr = '1234.56'.
MODIFYgt_result INDEX g_index.
ENDLOOP.
WRITE:'测试完成'.
ENDFORM. " SUB_TEST_INDEX
*&---------------------------------------------------------------------*
*& Form SUB_TEST_TABLE
*&---------------------------------------------------------------------*
* 测试一般的更新性能
*----------------------------------------------------------------------*
FORM sub_test_table .
CHECK p_box = '3'.
LOOP AT gt_result.
gt_result-menge = '2000.000'.
gt_result-dmbtr = '1234.56'.
MODIFYgt_result.
ENDLOOP.
WRITE:'测试完成'.
ENDFORM. " SUB_TEST_TABLE
上篇中的程序代码的测度结果如何呢?为了保证准确性,本程序在周六大部分不工作的情况下,在DEV开发系统上进行了测试。测试结果如下:
第一组
Symbol-fields:
index
general
第二组
Symbol-fields:
index
general
第三组
Symbol-fields:
index
general
测试结果在我的意料之中,但可能在一部分人的意料之外。为什么使用索引反而不如不使用索引的情况下快呢?
先说第一种情况使用字段符。大家都知道,字段符相当于C语言的指针,相当于循环的过程中直接更改的内表内容,比通过更改工作区再更改内表的情况简便了许多。所以性能比后面两种情况快了许多。
为什么使用索引反而不发直接更新呢?这儿其实有一个理解误区,就是一部分人认为更改内表的时候也是从内表的第一行开始逐一对比的。而实际情况并不如此,实际情况是循环过程中内表有一个字段sy-tabix,这个字段记录了循环过程中的记录索引数,直接更新内表时实际上已经使用了索引。我们人为地在更新内表时去指定索引,相当于画蛇添足!
因此,在循环内表并更新内表数据时,大家切记:考虑性能的话就使用字段符,否则就直接更新记录,千万不要自做聪明地使用索引。使用索引相当于在程序中做了无用功,反而影响了程序的性能。
几种内表更新方式的性能比较相关推荐
- ABAP几种内表的操作
ABAP几种内表的操作 这次的程序用到了哈希表,在这里,也顺便总结一下ABAP三种内表的特点. ABAP中有三类内表,标准表,排序表和哈希表. 三种内表介绍 标准表的每一行对应一个逻辑索引-SY-TA ...
- 仿站小工具8.0_安卓微信8.0版本可以升级了!新增4个实用功能,内附更新方式...
昨天凌晨微信8.0版本率先在苹果端上线,预示着微信7.0的时代已经过去了. 这次微信8.0的更新,一共更新了4个功能,因为实用.有趣,引发了众多安卓用户的羡慕之情.不要着急,更新方式在这里. 1. 更 ...
- java go md5_Go语言中三种不同md5计算方式的性能比较
前言 本文主要介绍的是三种不同的 md5 计算方式,其实区别是读文件的不同,也就是磁盘 I/O, 所以也可以举一反三用在网络 I/O 上.下面来一起看看吧. ReadFile 先看第一种, 简单粗暴: ...
- 【04】SAP ABAP性能优化 - 如何选用内表类型(STANDARD, SORTED, HASHED)?
ABAP提供了三种类型的内表, 即:标准表(Standard Table), 排序表(Sorted Table), 哈希表(Hashed Table).在未声明内表类型时,系统会将类型默认为标准表. ...
- ABAP 内表修改 MODIFY 和 MODIFY table 的区别
MODIFY table gt_intable FROM gs_intable. MODIFY gt_intable FROM gs_intable. 对于内表修改命令,MODIFY 与 MODIFY ...
- 关于 Java 字符串拼接的几种方式以及性能比较
一.字符串拼接 字符串拼接是我们在Java代码中比较经常要做的事情,就是把多个字符串拼接到一起. 我们都知道,String 是 Java 中一个不可变的类,所以他一旦被实例化就无法被修改. 不可变类的 ...
- jQuery(六)插件、Validate验证提交表单、submitHandler、更改错误信息显示的位置、required、Validator、内置验证方式表、validate ()的可选项汇总
jQuery(六)插件.Validate验证提交表单.submitHandler.更改错误信息显示的位置.required.Validator.内置验证方式表.validate ()的可选项汇总 文章 ...
- get 和 post 俩种提交表单的方式
get 和 post 俩种提交表单的方式 自动提交表单的数据 启用表单的自动提交方式时, 我们需要添加上这一句: eg:action="/Main/GetData" method= ...
- ABAP基础知识 内表汇总数据的方式
点击蓝字 关注我们 一 前言 新开一个专题: ABAP基础知识. 用于介绍一些ABAP中的基础知识.希望可以帮助到一些新学ABAP的朋友. 本文主要介绍ABAP中使用内表统计的几种方式 二 四种统计 ...
最新文章
- 2022-2028年中国茶几玻璃行业市场研究及前瞻分析报告
- OGRE 2.1 Windows 编译
- F - Prime Path POJ - 3126
- 射频全网通笔记(附全球频段划分及主要运营商对应表)
- 信息系统项目管理师-项目采购管理核心知识点思维脑图
- 北大青鸟广州天河中心S1T62班HTML项目答辩实录
- plsql(轻量版)_触发器
- 学习:java设计模式—工厂模式
- python编的俄罗斯方块游戏_python编写俄罗斯方块
- 对口升学计算机知识重点,对口升学信息技术(计算机)类2017年专业课考试大纲...
- 科技战疫丨SENSORO灵思智能安全服务助力疫情防控
- 微信公众号h5中调用微信支付
- PTA数组后五道演讲比赛中有10个评委打分(实型数据,十分制分数)一维数组中,然后输入欲删除数x,最后删除数组中值为x的元素并输出,键盘输入一个4×4阶的矩阵,编程输出它的转置矩阵。
- 2020计算机视觉会议地点,2020年计算机视觉与信息技术国际会议(CVIT 2020)
- 【办公必备软件】万彩办公大师教程丨PDF转HTML工具
- STM32F105RCT6使用CubeMX初始化工程——2:初始化CAN通信
- 渗透测试CTF-图片隐写的详细教程2(干货)
- CSS全科教程——第一部分:CSS基础
- 人际关系-《吸引力是这样炼成的》书中的精髓:掌握7个人际交往技能,收获丰富多彩的人生。
- 对领导集体提出意见和建议