abap代码优化和性能调优工具

news2024/9/29 3:34:19

select/end select与loop类似是循环(一个是对数据库表,一个是对内表)

select *效率低于select 字段1 字段2...

select 主键1 主键2 主键3 非主键4效率高于select 主键1 主键2 非主键4.

into table 内表效率高于into corresponding fields of table 内表(into table 内表要注意内表的结构字段顺序)

表中取值语句的where条件

条件中单值条件放在前面(效率回更高)

例如where spras = sy-langu

       and matnr in s_matnr.

其中范围的条件往后放> >= < <= <>都是范围条件

指针的的指向效率高于向工作区传值。

TRANSPORING NO FIELDS. 作用只读取不传值. 故gs_makt为空 同样也能加快read的效率.

效率低下代码

优化后

描述文字类字段要注意spras主键语言选取.


check效率比if效率更高,也比case效率高

check>case>if.

clear 工作区的必要性

loop是会按照依次读内表是  不需要提前手动清空

read效果与loop一样,但会出现读取数据读不到.所以需要读前清空

move需要看情况而定

TYPES:BEGIN OF ty_list,
  val TYPE C,
 name(4),
END OF ty_list.
DATA:gs_list TYPE ty_list,
      gt_list TYPE TABLE OF ty_list WITH HEADER LINE.
DO 9 TIMES.
  gs_list-val = sy-INDEX.
CONCATENATE '张' gs_list-val INTO gs_list-NAME.
  APPEND gs_list TO gt_list.
ENDDO.
DO 2 TIMES.
  WRITE:/ SY-INDEX.
LOOP AT gt_list INTO gs_list.
  CHECK gs_list-val < 6.
  WRITE:/ gs_list-val, gs_list-NAME.
  ENDLOOP.
  ENDDO.

CHECK在loop中相当于if中包continue.

一、性能调优工具
SE30/SAT
  运行时间分析工具(旧):se30       运行时间分析工具(新):SAT

      SE30主要提供看程序运行的总体时间(数据库、应用服务器成的总共运行时间)。通过输入事务码SE30进入运行分析初始界面如下图,输入需要运行的程序明细会事务代码,点击执行。

    程序执行完成后,点击评估可查看程序总体运行时间图如下:

 Settings:用来设置SAT运行属性的变式,默认为default,可以参照创建一个符合自己需求的变式。

执行之后可以在Evaluate页签下查看执行的分析文件

ST05
不仅提供SQL trace,还可以进行buffer trace,RFC trace等,看看语句执行耗时,分析是否有重复从一个表中抓取数据,对于耗时较长的取数语句,分析查询语句是否可优化
ST12     
二、性能调优tips
  数据库取数 、降低CPU负载、降低数据库负载(减少IO操作)、内存使用的优化
尽可能减少从数据库中取数的次数
在取数时尽可能只取自己需要的数据,尽量避免使用select * 这样的全量查询,相比 selcet ....INTO CORRESPONDING 的语句selcet ...into table会更有优,尽量避免使用MOVE-CORRESPONDING和INTO CORRESPONDING FIELDS OF,CORRESPONDING语句在系统内部存在隐式操作:元素名称匹配,元素类型匹配,元素类型转换。
读取数据内表时使用二分法查找会提高读数效率,read binary search ,记得读取之前先按关键字排序(备注:降序排序二分法查找就不生效了),二分法查找的速度很快,最大查询次数为log2n。也可以将内表定义为SORTED TABLE(顺序表是在计算机内存中以数组的形式保存的线性表,是指用一族地址连续的存储单元一次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的节点依次存放在计算机内存中一组地址连续的存储单元中),当使用READ TABLE语法时,如果查询字段跟SORTED TABLE的排序开始字段能匹配上,则SAP将自动采用二分法查找,需要注意的是如果read table并非SORTED TABLE的第一排序字段,系统将采用顺序查找,速度会慢很多。对于STANDARD TABLE和使用SORTED TABLE进行二分法查找,二者区别如下 :      (a、SORTED TABLE自始至终都保持排序,如果需要对内部进行频繁的插入、删除操作,则不推荐使用SORTED TABLE。 b、 如果我们要用的是类似LOOP AT it_lips WHERE....的语法时SORTED TABLE,系统会自动采用二分法优化查找过程)  。                                              

内表类型访问方式主键推荐方式查找算法
标准表索引访问、键值访问NON-UNIQUE KEY索引访问顺序查找法、二分查找法
排序表索引访问、键值访问NON-UNIQUE KEY 、UNIQUE KEY键值访问二分查找法
哈希表键值访问UNIQUE KEY键值访问哈希算法


   当数据较小(小于100行)并既需要使用索引访问,又需要通过不同的键值访问时,建议使用标准表,数据量比较巨大,且不存在重复行,只需使用关键字访问的内表应定义为哈希表,排序表适用于运行期内必须以某种排序形式出现的内表。

使用inner join查询数据时,尽可能不要关联太多表,如果需要尽可能将有效查询条件放在前面(小表-大表),让查询第一个表后结果集尽可能小,各表之间进行连接的时候,应考虑关键字段或索引字段的作用,Where也要准遵循小表-大表。
尽可能避免嵌套循环。
适当使用索引,好的索引会很大程度提升性能。
查询数据时使用in会比使用not in 语句更佳,同时使用eq、ne会比使用=、<>更优。
loop at a where  ..... endloop.使用优化

                                                                       
适时使用数据库中的聚合函数SUM.AVG,MAX.MIN.DISTICNT等。
使用第二索引提升性能查询。经常更新的表,不适合创建索引
内表求和,能够在SQL层次上实现就用SQL实现,不能实现的,在内表中使用at end of 之类进行求和。
用append lines of ***to ***,代替在循环中单条添加。
使用较高效的COLLECT 语句对记录进行聚集加总(备注:COLLECT 语句的效率只体现在当你使用的是排序表和哈希表的时候,或者内表经过有效排序之后。否则当内表数据过多时,检索时间会很长,一般不推荐使用记录条数非常多的标准表)
尽量不要在频率较高的循环语句中使用update,delete,insert,modify等操作。
使用up to n rows 来实现对数据前n项的查询
loop循环时,不要使用check语句对table进行查询,用where语句代替
OCCURS n 代表初始化内表的空间大小为n,当内表存储记录条数超出n时,系统将依靠页面文件存放超出部分的数据。当系统内存资源十分紧缺的时候,我们可以使用OCCURS n 的初始化方法,但是这样的效率稍微慢点。OCCURS 0 代表初始化内表的空间大小为无限,当内表存储记录条数不断增加时,内表所使用的内存空间不断扩大,直到系统无法分配为止。使用内存比使用页面交换更快一些,但是要考虑系统的资源状态。

SAP ABAP程序性能优化-养成良好的代码习惯_ᝰ随心ꦿེএ的博客-CSDN博客

SAP性能优化_sap se30-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1073416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux动态链接库.so文件

一、动态库和静态库的区别 库是一个二进制文件&#xff0c;包含的代码可以被程序调用&#xff0c;如标准库、线程库。Windows 和 Linux下的库文件格式不兼容。 Windows环境&#xff1a;静态库是 .lib 文件&#xff0c;共享库是 .dll 文件 Linux环境&#xff1a;静态库是 .a 文…

IC工程师职场必备《经典Verilog100多个代码案例》(附下载)

对于IC行业的人员而言&#xff0c;Verilog是最基础的入门&#xff0c;用于数字电路的系统设计&#xff0c;很多的岗位都会用到&#xff0c;可对算法级、门级、开关级等多种抽象设计层次进行建模。 Verilog由于其简单的语法&#xff0c;和C语言的相似性&#xff0c;目前被各大公…

uni-app:js时间与时间戳之间的转换

运行结果 代码 <template><view></view> </template><script>export default {data() {return {}},onLoad() {//时间转换为时间戳&#xff08;十位时间戳即秒级时间戳&#xff09;const time 2023-10-01 12:34:56; // 时间格式为年-月-日 时:分…

BlowFish加解密原理与代码实现

BlowFish加解密原理与代码实现 一丶简介 ​ BlowFish 是一个对称加密的加密算法。由Bruce Schneier&#xff0c;1993年设计的。是一个免费自由使用的加密算法。 了解的必要知识 BlowFish是一个对称区块加密算法。每次加密数据为 64位 &#xff08;2个int)类型数据大小。八个…

Maven 引入外部依赖

如果我们需要引入第三方库文件到项目&#xff0c;该怎么操作呢&#xff1f; pom.xml 的 dependencies 列表列出了我们的项目需要构建的所有外部依赖项。 要添加依赖项&#xff0c;我们一般是先在 src 文件夹下添加 lib 文件夹&#xff0c;然后将你工程需要的 jar 文件复制到 …

mac(M1)卸载miniconda3

参考https://stackoverflow.com/questions/29596350/how-to-uninstall-mini-conda-python step1 因为我目前只有一个base环境&#xff0c;所以直接在这个环境中安装 anaconda-clean即可 conda install anaconda-clean然后继续输入 anaconda-clean如果不加–yes&#xff0c;那…

精品Python考务监考管理系统

《[含文档PPT源码等]精品Python考务管理系统的设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技术&#xff1a;JavaSc…

SECS/GEM封装库RapidSecs开发手记HMSM

四. SECS/GEM封装库RapidSecs开发手记-基础库开发-1 https://blog.csdn.net/jxb_memory/article/details/105739410 secsgem https://www.cnpython.com/pypi/secsgem

95740-26-4|用于体内DNA合成的探针F-ara-EdU

产品简介&#xff1a;(2S)-2-Deoxy-2-fluoro-5-ethynyluridine&#xff0c;一种用于体内DNA合成的探针&#xff0c;其毒性比EdU和BrdU都小。当需要延长细胞存活时间和不受干扰的细胞周期进展时&#xff0c;非常适合进行代谢DNA标记。 CAS号&#xff1a;95740-26-4 分子式&…

2023腾讯云双11优惠活动服务器价格预测

2023腾讯云服务器双十一有活动吗&#xff1f;有的&#xff0c;双11轻量应用服务器和云服务器CVM均有活动&#xff0c;只是现在还未开启&#xff0c;一般为11月1日开始&#xff0c;活动时间持续1个月时间&#xff0c;腾讯云百科txybk.com预测一下2023年腾讯云服务器双十一优惠活…

链表常见问题

1.实现一个链表 public class Linked {public Node first;public Node last;//头插public void addFirst(int data){//获取原头节点Node f first;//创建新节点Node newNode new Node(data);//指向新头节点first newNode;//if(f null){last newNode;}else {newNode.next …

POI 和 EasyExcel 操作 Excel

一、概述 目前操作 Excel 比较流行的就是 Apache POI 和阿里巴巴的 easyExcel。 1.1 POI 简介 Apache POI 是用 Java 编写的免费开源的跨平台的 Java API&#xff0c;Apache POI 提供 API 给 Java 程序对 Microsoft Office 格式文档读和写的常用功能。POI 为 “Poor Obfuscati…

【工作流引擎】Activiti的使用01

基础配置 依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM…

Promise resolver undefined is not a function

错误的代码 function handlUsernameOrEmail(rules,value,){const regex /^([a-zA-Z0-9_-])([a-zA-Z0-9_-])(\.[a-zA-Z0-9_-]){1,2}$/;if(regex.test(value)){return new Promise().resolve(成功);}else {return new Promise().reject(失败);}// console.log(rules,rules,valu…

图文详解六十道Java并发

图文详解六十道Java并发 基础 1.并行跟并发有什么区别? 从操作系统的角度来看,线程是CPU分配的最小单位。 并行就是同一时刻,两个线程都在执行。这就要求有两个CPU去分别执行两个线程。并发就是同一时刻,只有一个执行,但是一个时间段内,两个线程都执行了。并发的实现依…

三、机器学习基础知识:Python常用机器学习库(Numpy第一部分)

文章目录 1、Numpy定义2、ndarray对象3、Numpy数据类型4、Numpy数组类型 1、Numpy定义 Numpy是Numberical Python的简称&#xff0c;是用来进行高性能计算与分析的基础包&#xff0c;是Python中重要的扩充库。它支持高维度数组与矩阵运算&#xff0c;也针对数组运算提供了大量…

gradle依赖导入,jar方式

新项目使用了gardle方式导入依赖&#xff0c;但是很不巧我都没有听过这个东西&#xff0c;然后就紧急的学了学&#xff0c;发现其实也听见的&#xff0c;然后准备动手试一下 问题 导入dm数据库驱动&#xff0c;换了好几种写法也不大行&#xff0c;然后发现我之前的项目也是使…

IDERA ER/Studio Data Professional 19.3.5 Crack

IDERA ER/Studio 数据架构师&#xff1f; 它能够从用户的单个界面创建和管理多个数据库平台的数据模型。信息建模者和架构师希望对与小型企业需求相关的不同数据高度做出反应。有些关键行动可能需要他们的关注。 特点&#xff1a; 构建数据模型作为增长周期的一部分。发现并记…

Redis的C客户端(hiredis库)使用

文章目录 1、Ubuntu安装redis服务端2、hiredis库的安装3、同步API接口的使用3.1、连接redis数据库redisConnect3.2、发送需要执行的命令redisCommand3.3、redisCommandArgv函数3.4、redisAppendCommand*函数支持管道命令3.5、释放资源3.6、同步连接代码 3.7、异步连接4、redis连…

Docker+jenkinsPipeline 运行实现python自动化测试

一、实现思路 在 Linux 服务器安装 docker创建 jenkins 容器jenkins 中创建 pipeline 项目根据自动化项目依赖包构建 python 镜像(构建自动化 python 环境)运行新的 python 容器&#xff0c;执行 jenkins 从仓库中拉下来的自动化项目执行完成之后删除容器 二、环境准备 Lin…