ABAP 两种多表查询的性能比较

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情


ABAP 两种多表查询的性能比较  


ABAP 两种多表查询的性能比较

在ABAP程序设计中,代码的优化非常重要,当数据量比较大的时候(例如上万或十万条记录),如果所需要的数据不在同一张表中,查询时需要对多表进行内连接。这时要注意一个问题,连接的表不能太多,否则会出现数据重复或是数据丢失的情况,而且查询的效率也会降低。

 

比较推荐的方法是:

先建立内表,用来存放数据库中的数据

先将少量表连接,将部分数据插入到内表中去

建立一个存放剩余数据的小内表

使用(for all entries in [大内表] where [数据库字段] = 内表字段)将大表已经存在的数据作为条件,把数据库中所需的剩余数据填充到小内表中

循环大内表, read 小内表, 将小内表的数据 modify 到大内表中。

 

这种查询方法很大程度的减少了多表连接时出现的BUG (重复数据,数据丢失)。

 

以下是测试的两个DEMO,由于数据量没有足够大,第一种查询的效率要高于第二种查询,主要是因为前者与数据库只交互了一次,而后者交互了两次,但在真实项目中,数据量往往很大,所以第二种是比较推荐的方法。

 

数据库表ZTALV_SZ 包含了所需字段

 

######################################################################################

##########                            Demo                         ################

######################################################################################

REPORT z_scott_join .

 

TABLES: vbap,vbep,vbak,kna1,ztalv_sz.

 

PARAMETERS p LIKE vbap-vbeln VALUE CHECK.

 

DATA: BEGIN OF itab OCCURS 0.

        INCLUDE STRUCTURE ztalv_sz.

DATA: END OF itab.

 

***********************************************************************

* Event Start-of-selection

***********************************************************************

START-OF-SELECTION.

 

 

  SELECT ap~vbeln ap~posnr ep~wmeng ap~netwr ap~waerk ep~edatu k~name1

    INTO CORRESPONDING FIELDS OF TABLE itab

      FROM vbap AS ap

        INNER JOIN vbep AS ep ON ap~vbeln = ep~vbeln

                              AND ap~posnr = ep~posnr

        INNER JOIN vbak AS ak ON ak~vbeln = ap~vbeln

        INNER JOIN kna1 AS k  ON  k~kunnr = ak~kunnr

          WHERE ap~vbeln = p.

 

 

  LOOP AT itab.

    WRITE: / itab-vbeln,

             itab-posnr,

             itab-wmeng,

             itab-netwr,

             itab-waerk,

             itab-edatu,

             itab-name1.

  ENDLOOP.

 


######################################################################################

##########                            Demo 2                          ################

######################################################################################


REPORT z_scott_join2 .

 

TABLES: vbap,vbep,vbak,kna1,ztalv_sz.

 

PARAMETERS p LIKE vbap-vbeln VALUE CHECK.

 

DATA: BEGIN OF itab OCCURS 0.

        INCLUDE STRUCTURE ztalv_sz.

DATA: END OF itab.

 

DATA: BEGIN OF sub_itab OCCURS 0,

        vbeln LIKE vbak-vbeln,

        name1 LIKE kna1-name1,

      END OF sub_itab.

 

**********************************************************

*Event start-of-selection

**********************************************************

START-OF-SELECTION.

 

 

  SELECT ap~vbeln ap~posnr ep~wmeng ap~netwr ap~waerk ep~edatu

    INTO CORRESPONDING FIELDS OF TABLE itab

      FROM vbap AS ap

        INNER JOIN vbep AS ep ON ap~vbeln = ep~vbeln

                             AND ap~posnr = ep~posnr

          WHERE ap~vbeln = p.

 

 

  SELECT ak~vbeln k~name1

    INTO TABLE sub_itab

      FROM vbak AS ak

        INNER JOIN kna1 AS k ON ak~kunnr = k~kunnr

          FOR ALL ENTRIES IN itab WHERE ak~vbeln = itab-vbeln.

 

  LOOP AT itab.

    READ TABLE sub_itab WITH KEY vbeln = itab-vbeln.

    itab-name1 = sub_itab-name1.

    MODIFY itab.

    CLEAR itab.

    CLEAR sub_itab.

  ENDLOOP.

 

  LOOP AT itab.

    WRITE: / itab-vbeln,

             itab-posnr,

             itab-wmeng,

             itab-netwr,

             itab-waerk,

             itab-edatu,

             itab-name1.

  ENDLOOP.

abap VALUE 关键字的使用 1111 阅读详情

相关推荐

SAP ABAP性能优化

SAP ABAP性能优化

woniu_maggie的博客 1812

让内也能跑出数据库的味道:ABAP SQL In-Memory Engine 下的查询实战与落地指南

ABAP SQL In-Memory Engine 实现了数据库与内的统一处理方式,允许在应用层内存中执行原本需数据库完成的JOIN、排序等操作。该技术通过减少数据搬运临时开销提升性能,同时保持跨数据库一致性。示例演示了从数据库执行相同JOIN查询获得一致结果,验证了该引擎的语义等价性。使用时需注意SQL复杂度,简单关系操作更易在内存执行,复杂查询可能回退到数据库临时方案。这一特性为S/4HANABTP环境的数据处理提供了新思路。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 844

SAP ABAP查询:从LOOP到HASH,一份写给新手的性能优化选择指南

本文详细介绍了SAP ABAP查询性能优化方法,从基础LOOP到高效HASH的选择指南。通过对比不同查询方式的性能特点,帮助新手开发者理解何时使用LOOP、READ、排序+二分法或HASH,以提升程序运行效率。特别适合需要处理大规模数据的ABAP开发者参考。

weixin_26763955的博客 124

ABAP - 9 交互程序是啥样的

文章目录 TYPES: BEGIN OF ty_vbak, vbeln TYPE vbeln_va, erdat TYPE erdat, ernam TYPE ernam, END OF ty_vbak. DATA: it_vbak TYPE TABLE OF ty_vbak, wa_vbak TYPE ty_vbak. DATA: BEGIN OF wa_vbap, vbeln TYPE vbeln_va, po

weixin_45689053的博客 392

sap程序优化,以及abap中的sql语句优化等

abap数据优化的几种方式● 使用FOR ALL ENTRIES语句,在使用该语句之前,应判断内是否为空.对于一些大(例如MSEG、BSEG等)的查询,尽量带入主键或索引进行查尽量避免使用SELECT * INTO CORRESPONDING语句以减少系统资源负载.LOOP 循环中禁止使用SELECT语句,可用SELECT取出放到临时内,在循环读.● 在使用JOIN语句时应尽可能使用KEY保证条件唯一性。● 尽量不要LOOP循环中嵌套循环....

lmszsd的博客 1763

SAP ABAP(一张内)关联查询

SAP ABAP(一张内)关联查询

Wriprin 的技术博客 1815

SAP ABAP

FI常用 GL部分:FAGLFLEXT(FMGLFLEXT)   新总账汇总 GLT0        旧总帐汇总           SKA1        总账科目主记录 (科目)                     科目层数据SKAT        总帐科目主记录(科目:说明)              包括语言代码SKB1        总帐科目主记录 (公司代码

ChampaignWolf的专栏 2913

ABAP

ABAP的增删改查操作。

博客简介 1789

ABAP查询

从数据库中取数据有三种方式:OPEN SQL NATIVE SQLLOGICAL DATABASE,LOGICAL DATABASE相对于前两种方式,有下列优势:l         它是按照primary key sequence来取数据的l         可以在logic database program加入权限检查l         可以自动产生selection screen

lvzhqi的专栏 2984

SAPABAPSQL查询分析器ZSQLEXPLORER:ABAP开发者的利器

SAPABAPSQL查询分析器ZSQLEXPLORER:ABAP开发者的利器 【下载地址】SAPABAPSQL查询分析器ZSQLEXPLORER使用说明 SAP ABAP SQL查询分析器(ZSQLEXPLORER)是一款专为ABAP开发者设计的高效工具,能够直接运行ABAP的OPEN SQL查询。与SE11或SE16等...

gitblog_06780的博客 950

ABAP SQL JOIN 内或FROM 内

新版本ABAP已支持从一个内中select ,或者join 一个内。 仅允许使用一次,不允许同时join两个内,或者from内又join内 项目中问题: SELECT的中有来自五个的SELECT-OPTION字段,超过了数据库建议连接查询的三个,此时原先的做法是先查询三个带SELECT-OPTION字段的内,然后用for all entries in主带出剩余的两个SELECT-OPTION字段,最后loop的时候对主赋值。 此时如果对主赋值不加以限制,那么最后主当中后两条被SE

谁的博客来着? 3826

ABAP数据操作

一、增加数据 1、INSERT插入数据 INSERT可以按内的具体字段向中插入一行或者行数据: INSERT [wa INTO|INITIAL LINE INTO] itab [INDEX idx]. INSERT [wa INTO|INITIAL LINE INTO] TABLE itab. INSERT LINES OF itab1 [FROM idx] [TO idx2] I...

willieyuan的博客 1万+

SAP-ABAP:SAP ABAP OpenSQL JOIN 操作权威指南高效关联数据

SAP-ABAP:SAP ABAP OpenSQL JOIN 操作权威指南高效关联数据

baidu_35680696的博客 997

一些优化ABAP程序性能的方法

ABAP程序很关注性能问题。但是在程序初期,由于没有大量的测试数据,我们很难发现一些程序的性能瓶颈在哪里,更无从谈如何优化性能了。不过,我想,如果在开发早期遵循一些好的开发方法,就有可能避免后期程序发生大的性能问题。影响 ABAP 程序性能的因素影响ABAP程序性能的因素有很,了解这些因素能够帮助我们分析ABAP程序运行异常缓慢的原因。1. 硬件性能数据库服务器、

勤奋懒人 3201

ABAP也能写 SQL:深入理解 SELECT FROM @itab 的用法、边界与性能取舍

摘要:本文探讨ABAP新语法SELECT FROM @itab的应用场景与性能考量。该语法允许开发者像查询数据库一样操作内存内,支持WHERE、ORDER BY、GROUP BY等SQL特性,提升代码可读性。然而,复杂查询可能触发数据从ABAP层传输到数据库临时处理,带来性能损耗。测试显示,在200万行数据场景下,基于键的FILTER操作通常优于SELECT语法。文章建议在OData服务等需要内存数据处理时使用该语法,但需注意查询复杂度以避免性能陷阱,特别是当涉及排序、聚合等可能触发数据库执行的场景

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1174

ABAP SELECT 个内(临时

写报时候我们一般会查主数据放在一个内,之后查询个内,然后LOOP 加read的形式去把数据匹配好,放到alv的内中。其中loop循环是耗时最长的。 不过今天这个语法可以SELECT 个内,可以查出最终数据。高效率报必备技能。 与这种方法有所不同ABAP SELECT内查询你可以参考比较 源代码 TABLES:vbak,vbap. SELECT-OPTIONS:S_VBELN FOR VBAK-VBELN. WITH +vbak AS ( SELECT vbeln, erna

寒武青锋的博客 4400

ABAP基础知识 用SQL处理内

一前言ABAP升级新语法,很新语法带来了更简洁的代码及更容易理解的代码形式.下图是截至S4 1909版本的ABAP语法升级信息(该截图来自ABAP中的帮助)在项目中也越来越的使用新语法来处理逻辑, 内ABAP中最关注处理性能的部分,新语法允许把内引入到SQL语句中执行.因此带来了使用SQL语句处理内的新方式本文通过示例比较常用的几种处理的新旧语法的性能比较二示例程序的数据样本来自A...

森林木的博客 597

SAP ABAP 动态内的条件查询(SORT / READ TABLE / LOOP)

动态内是动态报的核心,动态内的条件操作能有效解决性能问题。这篇文章用于普及动态内在 SORT / READ TABLE / LOOP 中使用条件查询

SAP李斌,本人承诺所有原创文章均不使用任何AI生成技术,请大家放心阅读。 3777

SAP ABAP——内(一)【内概要介绍】

本文是SAP ABAP【内】文章系列的开篇,主要对内进行简单的介绍,将从概要,以及分类三个方面进行介绍

Thunder Wang的博客 2930
上一篇: ABAP中使用for all entries in小结
下一篇: FOR ALL ENTRIES的效率问题
kethleen_dan
博客等级 码龄10年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值