SAP内表查询速度优化实例-OPEN SQL
一、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的更多相关文章
- mysql索引原理及查询速度优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- sap 内表
内表的目的在ABAP/4中,主要使用表格.表格是R/3系统中的关键数据结构.长期使用的数据存储在关系数据库表格中.关于如何读取和处理数据库表格的详细信息,参见读取并处理数据库表.除了数据库表格,还可以 ...
- mongodb多表查询(附带pymongo实例)
mongodb有$lookup可以做多表查询 举个例子 数据如下 db.orders.insert([ { , , }, { , , }, { } ]) db.inventory.insert([ { ...
- SAP内表转XML文件
今天有个兄弟问如何实现以XML的方式输出内表的内容,这个问题我以前好像没有写过.倒不是不会写,而是写的方法太多了,有极其简单的,也有很复杂的,而且网上资料也很多. 找到以前写的一个程序,稍微修改了一下 ...
- SAP内表类型及其数据读取效率评估
内表大概分3种: 1.标准表standard tables:如果不指定BINARY SEARCH附加选项,则默认为线性查找(linear search),既一条一条的查找. 2.排序表(sorted ...
- MySQL多表查询,Navicat使用,pymysql模块,sql注入问题
一.多表查询 #建表 create table dep( id int, name varchar(20) ); create table emp( id int primary key auto_i ...
- mysql经纬度查询并且计算2KM范围内附近用户的sql查询性能优化实例教程
之前很傻很天真地以为无非就是逐个计算距离,然后比较出来就行了,然后当碰到访问用户很多,而且数据库中经纬度信息很多的时候,计算量的迅速增长,能让服务器完全傻逼掉,还是老前辈的经验比我们丰富,给了我很大的 ...
- 记一次SqlServer大表查询语句优化和执行计划分析
数据库: sqlserver2008r2 表: device_data 数据量:2000w行左右 表结构 CREATE TABLE [dbo].[device_data]( [Id] [int] ID ...
- 记一次Hbase查询速度优化经历
项目背景: 在这次影像系统中,我们利用大数据平台做的是文件(图片.视频等)批次的增删改查,每个批次都包含多个文件,上传完成以后要添加文件索引(文件信息及批次信息),由于在Hbase存储的过程中,每个文 ...
随机推荐
- python——列表操作函数和方法
1.添加新元素 1.1 append()函数 描述:append() 方法用于在列表末尾添加新的对象. 语法:list.append(obj) 参数:obj -- 添加到列表末尾的对象. 返回值:该方 ...
- console.log的高级用法
//基本用法 console.log('最常见用法\n换行'); console.error('输出错误信息 会以红色显示'); console.warn('打印警告信息 会以黄色显示'); cons ...
- php之ob_start()缓冲区
ob_get_contents()函数及与其相关几个函数的用法 ob_start() ob_get_contents(); 获取缓冲区内容,如果是纯 html内容或标签,则都会放于浏览器的缓冲区中. ...
- VPX板卡 基于XC7K325T的3U VPX FMC接口数据收发预处理平台
一.板卡概述 标准VPX 3U板卡, 基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIe ...
- windows和mtu值修改
前言 有时候我们需要修改mtu值来对付乱七八糟的网络问题 windows修改方法 1.netsh interface ipv4 show subinterfaces 查询到目前系统的MTU值 2.ne ...
- MySQL中常见函数
一.日期函数 1.NOW() 返回当前日期和时间 mysql> SELECT NOW(); +---------------------+ | NOW() | +-------------- ...
- bzoj4007 & loj2111 [JLOI2015]战争调度 复杂度分析+树上背包
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4007 https://loj.ac/problem/2111 题解 同 [NOI2006]网络 ...
- BZOJ2280 [Poi2011]Plot 二分+倍增+最小圆覆盖
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2280 https://loj.ac/problem/2159 题解 显然对于一段的 \(q_i ...
- 前端每日实战:49# 视频演示如何用纯 CSS 创作一支诱人的冰棍
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/vrxzMw 可交互视频教程 此视频 ...
- 1.WCF学习--创建简单的WCF服务
一.基本了解WCF 1.面向服务代表的是一种设计理念,和面向对象.面向组件一样,体现的是一种对关注点进行分解的思想,面向服务是和技术无关的 2.WCF需要依存一个运行着的宿主进程,服务寄宿就是为服务指 ...