一、FOR ALL ENTRIES IN 案例

今天碰到工单报工统计分析表查询速度特别慢

经查看源代码:

SELECT afpo~dwerk afko~aufnr afpo~matnr AS plnbez afpo~charg afpo~psmng afko~fevor afko~aufpl
      FROM afko INNER JOIN afpo
        ON afko~aufnr = afpo~aufnr
      INTO CORRESPONDING FIELDS OF TABLE it_afpo
     WHERE afpo~dwerk = p_dwerk
       AND afpo~aufnr IN p_aufnr
       AND afpo~matnr IN p_matnr
       AND afko~fevor IN p_fevor
       AND afpo~charg IN p_charg.

IF f_wr = 'X'.
    SELECT *
      FROM afru
      INTO CORRESPONDING FIELDS OF TABLE it_afru
      FOR ALL ENTRIES IN it_afpo
     WHERE werks = it_afpo-dwerk
       AND aufnr = it_afpo-aufnr
       AND ersda IN p_ersda
       AND prdut IN p_prdut
       AND stokz <> 'X'
       AND stzhl = 0 .
  ELSE.
    SELECT *
      FROM afru
      INTO CORRESPONDING FIELDS OF TABLE it_afru
      FOR ALL ENTRIES IN it_afpo
     WHERE werks = it_afpo-dwerk
      AND aufnr = it_afpo-aufnr
      AND ersda IN p_ersda
      AND prdut IN p_prdut.
  ENDIF.

FOR ALL ENTRIES IN 使用前需判断后面的内表是否为空,为空则查询出的数据特别多,影响查询速度,如内表数据量很大,速度也很慢。

这样就是 FOR ALL ENTRIES IN 后面内表的数据量很大。一年的工单有一万多条。

所以这里,不使用FOR ALL ENTRIES IN语句。

解决方法:

1、where语句in该内表,定义range类型内表:it_aufnr 存储 it_afpo-aufnr 数据。


RANGES: it_aufnr FOR afko-aufnr.
  LOOP AT it_afpo.
    it_aufnr-low = it_afpo-aufnr.
    it_aufnr-sign = 'I'.
    it_aufnr-option = 'EQ'.
    APPEND it_aufnr.
  ENDLOOP.
也可以查询it_afpo的时候就直接赋值给it_aufnr

例:(查询出的数据要用low,需要定义sign和option)

SELECT aufnr INTO it_aufnr-low FROM afko WHERE dwerk = p_dwerk AND gltri IN p_ersda.
    it_matnr-sign = 'I'.
    it_matnr-option = 'EQ'.
    APPEND it_matnr.
  ENDSELECT.

IF NOT it_aufnr[] IS INITIAL.


SELECT * INTO CORRESPONDING FIELDS OF TABLE it_afru
     FROM afko WHERE dwerk = p_dwerk AND ersda IN p_ersda AND aufnr IN it_aufnr 
                     AND prdut IN p_prdut AND stokz <> 'X' AND stzhl = 0 .

也可以这样写:

append it_aufnr to it_aufnr[].

WHERE aufnr IN it_aufnr[].

2、loop 循环 it_afru 内表,删除 it_afpo 中不存在的 aufnr 行。

SELECT * FROM afru
     INTO CORRESPONDING FIELDS OF TABLE it_afru
*     FOR ALL ENTRIES IN it_afpo
    WHERE werks = p_dwerk
*      AND aufnr = it_afpo-aufnr
      AND ersda IN p_ersda
      AND prdut IN p_prdut
      AND stokz <> 'X'
      AND stzhl = 0 .

IF NOT it_afru[] IS INITIAL.

LOOP AT it_afru .
      READ TABLE it_afpo WITH KEY aufnr = it_afru-aufnr.
      IF sy-subrc <> 0.
        DELETE it_afru[].
        CONTINUE..
      ENDIF.
    ENDLOOP.

未完待续~~~

SAP内表查询速度优化实例-OPEN SQL的更多相关文章

  1. mysql索引原理及查询速度优化

    一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...

  2. sap 内表

    内表的目的在ABAP/4中,主要使用表格.表格是R/3系统中的关键数据结构.长期使用的数据存储在关系数据库表格中.关于如何读取和处理数据库表格的详细信息,参见读取并处理数据库表.除了数据库表格,还可以 ...

  3. mongodb多表查询(附带pymongo实例)

    mongodb有$lookup可以做多表查询 举个例子 数据如下 db.orders.insert([ { , , }, { , , }, { } ]) db.inventory.insert([ { ...

  4. SAP内表转XML文件

    今天有个兄弟问如何实现以XML的方式输出内表的内容,这个问题我以前好像没有写过.倒不是不会写,而是写的方法太多了,有极其简单的,也有很复杂的,而且网上资料也很多. 找到以前写的一个程序,稍微修改了一下 ...

  5. SAP内表类型及其数据读取效率评估

    内表大概分3种: 1.标准表standard tables:如果不指定BINARY SEARCH附加选项,则默认为线性查找(linear search),既一条一条的查找. 2.排序表(sorted ...

  6. MySQL多表查询,Navicat使用,pymysql模块,sql注入问题

    一.多表查询 #建表 create table dep( id int, name varchar(20) ); create table emp( id int primary key auto_i ...

  7. mysql经纬度查询并且计算2KM范围内附近用户的sql查询性能优化实例教程

    之前很傻很天真地以为无非就是逐个计算距离,然后比较出来就行了,然后当碰到访问用户很多,而且数据库中经纬度信息很多的时候,计算量的迅速增长,能让服务器完全傻逼掉,还是老前辈的经验比我们丰富,给了我很大的 ...

  8. 记一次SqlServer大表查询语句优化和执行计划分析

    数据库: sqlserver2008r2 表: device_data 数据量:2000w行左右 表结构 CREATE TABLE [dbo].[device_data]( [Id] [int] ID ...

  9. 记一次Hbase查询速度优化经历

    项目背景: 在这次影像系统中,我们利用大数据平台做的是文件(图片.视频等)批次的增删改查,每个批次都包含多个文件,上传完成以后要添加文件索引(文件信息及批次信息),由于在Hbase存储的过程中,每个文 ...

随机推荐

  1. 2、单线性变量的回归(Linear Regression with One Variable)

    2.1 模型表示 我们通过一个例子来开始:这个例子是预测住房价格的,我们要使用一个数据集,数据集包含俄勒冈州波特兰市的住房价格.在这里,我要根据不同房屋尺寸所售出的价格,画出我的数据集.比方说,如果你 ...

  2. 使用form提交到搜狗浏览器示例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Windows程序设计--(四)文本输出

    4.1 绘制和重绘 4.1.2 有效矩阵和无效矩阵 在擦除对话框之后,需要重画的被对话框遮住的矩形区域,这个区域称为「无效区域」或「更新区域」.正是显示区域内无效区域的存在,才会让Windows将一个 ...

  4. 2019-9-8-WPF-渲染原理

    title author date CreateTime categories WPF 渲染原理 lindexi 2019-9-8 10:40:0 +0800 2018-7-15 16:2:47 +0 ...

  5. EAN13条码的校验位的Excel算法

    校验位原公式: 单元格=10-RIGHT(SUM(MID($B3,{1;2;3;4;5;6;7;8;9;10;11;12},1)*{1;3;1;3;1;3;1;3;1;3;1;3})) 简化公式: 单 ...

  6. Tab选项卡 自动切换效果js实现

    try.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  7. jmeter 参数化4_Function Helper中的函数

    Function Helper中的函数:  可作为其他参数化方式的补充项,如:随机数生成的函数${__Random(,,)} 操作路径:操作路径:Options-->Function Helpe ...

  8. springBoot 连接数据库

    心得:1.先添加依赖. 2.在application.yml文件中创建mybatis的连接,与项目连接起来. 3.application.yml文件中可以自行配置服务器的端口,配置mybatis的路径 ...

  9. Apache Flink 为什么能够成为新一代大数据计算引擎?

    众所周知,Apache Flink(以下简称 Flink)最早诞生于欧洲,2014 年由其创始团队捐赠给 Apache 基金会.如同其他诞生之初的项目,它新鲜,它开源,它适应了快速转的世界中更重视的速 ...

  10. spring-cloud:熔断监控Hystrix Dashboard和Turbine的示例

    1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springCl ...