0


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

在这里插入图片描述

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


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


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

目录


前言

在这里插入图片描述

  在本节内容中,我们将继续学习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 INTODATA(ls_name)...
ENDLOOP.

参数介绍:

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

新老语法性能分析

  下面给出一个详细的案例来对比使用ABAP SQL

新语法

前后

语句性能的变化

PS:使用ABAP SQL新语法时会进入

严格检查模式

,程序中所有的代码都要使用新语法,OPEN SQL老语法的变量需要在前面加

“@”

来进行区分!

老语法示例代码

FORM form_01 .DATA:gt_student TYPETABLEOF zstudent_wyz,
       gs_student TYPE zstudent_wyz.SELECT zschool zcode INTO CORRESPONDING FIELDSOFTABLE 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 INTOTABLE@DATA(gt_sflight)FROM sflight .LOOP AT gt_sflight INTODATA(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 = AC

CONNID = 0820

FLDATE = 2002/02/18

的该条数据,并且打印输出到屏幕上。

在这里插入图片描述

不使用SELECT SINGLE语句

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

FORM form_01 .SELECT carrid,connid,fldate INTOTABLE@DATA(gt_sflight)FROM sflight
    WHERE carrid ='AC'AND
          connid =0820AND
          fldate ='20020218'.LOOP AT gt_sflight INTODATA(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 =0820AND
          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}{评论,你的意见是我进步的财富!}
   
  
 评论,你的意见是我进步的财富!

本文转载自: https://blog.csdn.net/weixin_59480481/article/details/130120577
版权归原作者 ThundersArk 所有, 如有侵权,请联系我们删除。

“「SAP ABAP」OPEN SQL(十)【SQL性能优化(一)】”的评论:

还没有评论