「SAP ABAP」OPEN SQL(十)【SQL性能优化(一)】

news2025/1/24 5:29:52

在这里插入图片描述

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。


💅文章概要: 在本节内容中,我们将继续学习ABAP OPEN SQL的知识,今天带来的内容是ABAP SQL性能优化的开篇,在上一节中我们介绍了SAT事务码的运用,为大家打下了坚实的基础,相信各位小伙伴们都已经熟知如何使用SAT事务码进行程序性能分析了吧!那么从本节开始将正式进入SQL性能优化实战部分!拿起键盘跟我练,一路火光带闪电!


🤟每日一言: 永远年轻,永远热泪盈眶!

目录

  • 前言
  • 数据库表准备
  • (一)ABAP SQL新老语法如何选择?
    •  新老语法性能分析
      •   老语法示例代码
      •   新语法示例代码
    •  分析总结
  • (二)尽量少地使用 SELECT * 语句
  • (三)海量数据处理中避免使用SELECT...ENDSELECT语句
  • (四)尽量少使用子查询语句
  • (五)多用SELECT SINGLE语句和UP TO 1 ROWS语句
    •  不使用SELECT SINGLE语句
    •  使用SELECT SINGLE语句
    •  性能分析对比
  • 写在最后的话


前言

在这里插入图片描述

  在本节内容中,我们将继续学习ABAP OPEN SQL的知识,今天带来的内容是ABAP SQL性能优化的开篇,在上一节中我们介绍了SAT事务码的运用,为大家打下了坚实的基础,相信各位小伙伴们都已经熟知如何使用SAT事务码进行程序性能分析了吧!那么从本节开始将正式进入SQL性能优化实战部分!拿起键盘跟我练,一路火光带闪电!


数据库表准备


在这里插入图片描述

  本文所有案例都是基于一个我自己创建的Z表,该表结构如上图所示,供各位小伙伴们对照来观察代码运行结果:


(一)ABAP SQL新老语法如何选择?


在这里插入图片描述
  关于ABAP SQL新语法的介绍将在本系列的最后进行介绍,这里只列举ABAP SQL新语法最基础的应用:

以下是ABAP SQL新语法的一般语法样式:

SELECT ... 
FROM  table_name
INTO @DATA(lt_name)
WHERE ...
LOOP AT lt_name INTO DATA(ls_name)
...
ENDLOOP.

参数介绍:

  • <table_name>: 目标数据库表
  • <lt_name>: 临时内表。
  • <ls_name>: 临时工作区。

 新老语法性能分析

  下面给出一个详细的案例来对比使用ABAP SQL新语法前后语句性能的变化

PS:使用ABAP SQL新语法时会进入严格检查模式,程序中所有的代码都要使用新语法,OPEN SQL老语法的变量需要在前面加“@”来进行区分!

  老语法示例代码

FORM form_01 .
  DATA:gt_student TYPE TABLE OF zstudent_wyz,
       gs_student TYPE zstudent_wyz.
  SELECT zschool zcode INTO CORRESPONDING FIELDS OF TABLE gt_student
  FROM ZSTUDENT_WYZ .
  LOOP AT gt_student INTO gs_student.
    WRITE: / gs_student-zschool,gs_student-zcode.
  ENDLOOP.
ENDFORM.

START-OF-SELECTION.
  PERFORM form_01.

PS:语句性能分析如下:

  • 下面图一为1000条目数的语句性能,图二为10000条目数的语句性能

1000条目数语句性能
10000条目数语句性能

  新语法示例代码

FORM form_01 .
  SELECT carrid,connid,fldate INTO TABLE @DATA(gt_sflight)
  FROM sflight .
  LOOP AT gt_sflight INTO DATA(gs_sflight).
    WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-fldate.
  ENDLOOP.
ENDFORM.

START-OF-SELECTION.
  PERFORM form_01.

PS:语句性能分析如下:

  • 下面图一为1000条目数的语句性能,图二为10000条目数的语句性能

1000条目数语句性能

10000条目数语句性能

 分析总结

  可以看到ABAP SQL新语法在处理大量数据的时候SQL语句花费的时间要比老语法小很多。因此,新语法在处理大批量数据的时候性能会更加优越,并且语法更加简洁,是我们每一个ABAPer都需要学会并且掌握的!

PS:不过在某些特殊场景,或者数据量较小的时候。ABAP SQL老语法会更加适合,并且在老系统版本(ECC)中,很多ABAP SQL新语法是不支持的,只能使用老语法!

  综上所述:ABAP SQL新老语法我们都需要学会并且掌握,并且熟练运用ABAP SQL新语法后会在工作中更加如鱼得水!


(二)尽量少地使用 SELECT * 语句


在这里插入图片描述

  关于这部分内容的讲解,在上一篇文章「SAP ABAP」OPEN SQL(九)【SAT事务码】的结尾进行了详细的介绍,大家可以去看看哦!这里我就直接把结论放出来!

PS:在使用SELECT语句的时候,最好只选择我们要用到的字段!使用" SELECT *"语句的性能开销会更大一些!


(三)海量数据处理中避免使用SELECT…ENDSELECT语句


在这里插入图片描述

  ABAP中支持一种SELECT...ENDSELECT的结构,就是可以在SELECT中对取得的每一行数据(或是几个字段)可以先放入一个行结构(或是几个字段)中,再做处理。

  初看似乎觉得蛮有用的,的确这个结构本身就是为了方便处理数据的。但是,如果你滥用了这种结构,那么会严重影响程序性能。因为数据量大了之后,在SELECT和END SELECT之间做处理的时间会很长,从而导致数据库端因为连接超时而断开

PS:由此可以判断,SELECT-END SELECT语句在整个过程中是保持数据库连接的,对数据库绝对是个负担。

  所以,在大数据量处理的报表中,不能用SELECT…END SELECT这种写法。


(四)尽量少使用子查询语句


在这里插入图片描述

  对于ABAP来说,不推荐使用子查询语句,一旦数据量过大效率就很难保证!执行子查询时,会先创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。


(五)多用SELECT SINGLE语句和UP TO 1 ROWS语句


在这里插入图片描述

  如果确定只需要查找一条数据时,建议使用SELECT SINGLE...。除此之外还可使用ORDER BY配合UP TO 1 ROWS ...来查找某一字段值的最大值,这样子性能开销会更小!

  下面将进行一个详细的案例讲解,帮助各位小伙伴们进行对比观察使用SELECT SINGLE前后的语句性能开销:

业务背景:已经数据库表SFLIGHT如下图所示,现在我确定只需要查找CARRID = ACCONNID = 0820FLDATE = 2002/02/18 的该条数据,并且打印输出到屏幕上。

在这里插入图片描述

 不使用SELECT SINGLE语句

PS:按照传统方式,需要先根据检索条件将数据从数据库表中查询并且INTO到内表中,再将内表循环至结构体变量中。

FORM form_01 .
  SELECT carrid,connid,fldate INTO TABLE @DATA(gt_sflight)
    FROM sflight
    WHERE carrid = 'AC' AND
          connid = 0820 AND
          fldate = '20020218'.
  LOOP AT gt_sflight INTO DATA(gs_sflight).
    WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-fldate.
  ENDLOOP.
ENDFORM.

START-OF-SELECTION.
  PERFORM form_01.

 使用SELECT SINGLE语句

FORM form_01 .
  SELECT SINGLE carrid,connid,fldate INTO @data(gs_sflight)
    FROM sflight
    WHERE carrid = 'AC' AND
          connid = 0820 AND
          fldate = '20020218'.
  WRITE: / gs_sflight-carrid,gs_sflight-connid,gs_sflight-fldate.
ENDFORM.

START-OF-SELECTION.
  PERFORM form_01.

在这里插入图片描述

 性能分析对比

  在做了多轮试验后,确实证明使用SELECT SINGLE语句效率会更高!

PS:上述截图只截取了其中有代表性的一次!


写在最后的话

  本文花费大量时间介绍了ABAP SQL性能优化第一篇,希望能帮助到各位小伙伴,码文不易,还望各位大佬们多多支持哦,你们的支持是我最大的动力!

在这里插入图片描述

原 创 不 易 , 还 希 望 各 位 大 佬 支 持 一 下 \textcolor{blue}{原创不易,还希望各位大佬支持一下}

👍 点 赞 , 你 的 认 可 是 我 创 作 的 动 力 ! \textcolor{9c81c1}{点赞,你的认可是我创作的动力!}

⭐️ 收 藏 , 你 的 青 睐 是 我 努 力 的 方 向 ! \textcolor{ed7976}{收藏,你的青睐是我努力的方向!}

✏️ 评 论 , 你 的 意 见 是 我 进 步 的 财 富 ! \textcolor{98c091}{评论,你的意见是我进步的财富!}

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

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

相关文章

mybatis-plus mpw 基于nacos-配置中心失效问题解决。

先谈谈个人理解&#xff1a; 配置中心下的配置加密做不做其实意义不大。 1、首先nacos console 内网化&#xff0c;受到攻击概率很低 2、加密后&#xff0c;各namespace 下的配置信息查看不友好。增加开发成本 3、对称加密既然组员都有密码了&#xff0c;还谈何来的秘密。 4、有…

【嵌入式环境下linux内核及驱动学习笔记-(4-字符驱动实例)】

目录 1、完整的字符设备驱动的模板2、相关函数2.1 container_of()2.2 kmalloc2.3 copy_to_user()2.4 copy_from_user()2.5 系统调用open()2.6 系统调用read2.7 系统调用write2.8 系统调用close 3、实例&#xff1a;多个同类字符设备的驱动3.1 驱动代码3.2 测试 1、完整的字符设…

【C语言】初阶指针(指针及其类型以及野指针)

简单不先于复杂&#xff0c;而是在复杂之后。 目录 1. 指针是什么&#xff1f; 2. 指针和指针类型 2.1 指针-整数 2.2 指针的解引用 3. 野指针 3.1 野指针成因 3.2 如何规避野指针 1. 指针是什么&#xff1f; 指针理解的两个要点&#xff1a; 1. 指针是内存中最小…

HCLE--虚拟机安装ntp等相关服务出现报错解决和通过SSH实现免密登录

.1 在服务端主机上安装ntp服务&#xff1a; yum install ntp 1.2 修改/etc/ntp.conf文件&#xff0c;将默认的ntp服务器地址替换为可用的ntp服务器地址。例如&#xff1a; server ntp1.aliyun.com iburst server ntp2.aliyun.com iburst server ntp3.aliyun.com iburst 1…

JSP-JDBC-设计一个简单的网上名片管理系统

需求&#xff1a; 1&#xff0e;设计一个简单的网上名片管理系统&#xff0c;实现名片的增、删、改、查等操作。该名片管理系统包括如下功能&#xff1a; &#xff08;1&#xff09;用户登录与注册 用户登录&#xff1a;在登录时&#xff0c;如果用户名和密码正确&#xff0…

举一反三学python(11)—excel实例

一、乘法表写入EXCEL 想必大家对九九乘法表的代码记忆尤新&#xff1a;for i in range(1,10): # 9行 for j in range(1,i1): # 列数是动态变化的&#xff0c;是1-9列 print(f{j}x{i}{j*i},end\t) # 格式化输出并按制表位…

8脚语音芯片有什么特点?

一、8脚语音芯片指的是什么&#xff1f; 8脚语音芯片&#xff0c;顾名思义就是拥有8个脚的一颗芯片&#xff0c;8脚其实是指8引脚&#xff0c;而引脚又被叫做管脚。引脚就是指从集成电路&#xff08;芯片&#xff09;内部电路引出与外围电路的接线&#xff0c;引脚构成了这块芯…

如何使用YOLOv5的pycocotools进行coco指标评估

使用YOLOv5进行coco指标评估 1. 安装pycocotools2.重新排序并命名3. 将txt标签转换为json格式格式2. 生成json3. 测试是否正确4. 运行val.py完整版本&#xff08;一次运行所有&#xff09; 1. 安装pycocotools pip install pycocotools -i https:pypi.douban.com/simple2.重新…

HTML5 <meter> 标签、HTML5 <mark> 标签

HTML5 <meter> 标签 实例 使用 meter 元素展示给定的数据范围&#xff1a; <meter value"2" min"0" max"10">2 out of 10</meter><br> <meter value"0.6">60%</meter>尝试一下 浏览器支持 Fir…

【Python知识】2个特别好用的python模块(请收藏!)

文章目录 前言一、介绍二、FuzzyWuzzy库介绍2.1 fuzz模块2.2 简单匹配&#xff08;Ratio&#xff09;2.3 非完全匹配&#xff08;Partial Ratio&#xff09;2.3 忽略顺序匹配&#xff08;Token Sort Ratio&#xff09;2.4 去重子集匹配&#xff08;Token Set Ratio&#xff09;…

matlab数据归一化与反归一化处理

假如数据实际取值范围为 X i ∈ [ − π π ] , i 1 , 2 , 3 X_i \in [-\pi \ \ \pi], i1,2,3 Xi​∈[−π π],i1,2,3&#xff0c;变量服从正态分布 示例如下&#xff1a; %% 数据归一化处理及其概率密度函数 clear clc Mu [0 0 0]; % 均值 Sigma [1 1 1]; % 标准差 C…

EA使用教程

文章目录 创建新工程属性设置导出图片到剪切板时序图中取消消息后面自动生成的括号在文本框中回车取消流程图的背景渐变导出更清晰图片 创建新工程 1. 点击 FILE -> New Project 开始创建新工程 2. 为新工程命名 3. 选择模型 以下为常用设计模型&#xff1a; Business …

Java并发工具合集JUC大爆发

1. CountDownLatch CountDownLatch是一个同步计数器&#xff0c;初始化的时候 传入需要计数的线程等待数&#xff0c;可以是需要等待执行完成的线程数&#xff0c;或者大于 &#xff0c;一般称为发令枪。\ ​ countdownlatch 是一个同步类工具&#xff0c;不涉及锁定&#xff0…

我实现了一个乞丐版的评论功能

文章目录 设计评论功能0 设计初衷1 前端组建设计**设计原则****设计代码**组件核心代码**调用组建并给出mock数据****效果** 2 后端数据库设计3 后端接口设计4 前后端联调5 后端评论保存接口设计6 前端评论填写流程设计7 联调8 验证码美化 设计评论功能 0 设计初衷 经过长达八…

三百左右的蓝牙耳机哪个音质好?三百左右音质最好的蓝牙耳机推荐

在外出携带的数码产品中&#xff0c;蓝牙耳机的出现频率居高不下&#xff0c;一部手机&#xff0c;一副耳机已经成为不少人外出的标配。蓝牙耳机无外乎是用来听的&#xff0c;下面&#xff0c;我来给大家推荐几款三百左右音质好的蓝牙耳机&#xff0c;一起来看看吧。 一、南卡…

LabVIEW-字符串与路径控件

在前面板中字符串与路径控件位于下图所示位置&#xff1a; 字符串输入和显示功能&#xff0c;是用户最常用的基本操作功能单击字符串控件&#xff0c;鼠标右键&#xff0c;选择“属性”可以对字符串控件的外观进行设置。显示样式有四种方式&#xff0c;即正常、反斜杠符号、密码…

家用洗地机好用吗?好用的洗地机分享

洗地机是一种高效、节能、环保的清洁设备&#xff0c;广泛应用于各种场所的地面清洁工作。它不仅可以快速清洁地面&#xff0c;还可以有效去除污渍、油渍等难以清洁的污染物&#xff0c;让地面恢复光洁如新的状态。同时&#xff0c;洗地机还可以减少清洁人员的劳动强度&#xf…

研读Rust圣经解析——Rust learn-10(泛型,trait,生命周期)

研读Rust圣经解析——Rust learn-10&#xff08;泛型&#xff0c;trait&#xff0c;生命周期&#xff09; 泛型应用泛型方法泛型结构体枚举泛型方法定义中的泛型 trait定义一个trait默认trait方法实现为结构体实现trait调用trait中实现的方法将trait作为参数trait bound多实现入…

2023年6月CDGP数据治理专家认证考试火热报名中

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

数据结构—单链表

目录 1.前言 2.了解单链表 3.单链表代码实现 3.1 单链表结构体实现 3.2 创建节点 3.3 打印单链表 3.4 尾插 3.5 头插 3. 6 头删 3.7 尾删 3.8 查找 3.9 插入 3.9.1 在pos位置之前插入 3.9.2 在pos位置之后插入&#xff08;主要使用这种功能&#xff09;---不需要找…