缓慢选择所有条目

2024-03-19

下面的 SELECT 与内部表一起运行GIT_KUNNR_TAB包含 2,291,000 条具有唯一客户 (kunnr) 的行,需要 16 分钟才能完成。

  select kunnr umsks umskz gjahr belnr buzei bschl shkzg dmbtr bldat
           zfbdt zbd1t zbd2t zbd3t rebzg rebzj rebzz rebzt
        into corresponding fields of table git_oi_tab
      from bsid
        for all entries in git_kunnr_tab
      where bukrs  =  p_bukrs
        and kunnr  =  git_kunnr_tab-kunnr 
        and umsks  = ' '
        and augdt  =   clear_augdt
        and budat  le  p_key 
        and blart  in  s_blart
        and xref3  in  s_xref3.

BSID 总共包含 20,000,000 条记录,对于 2,291,000 个唯一客户端,它从 BSID 获取 445,000 条记录。

大多数时候,线路甚至更多GIT_KUNNR_TAB.

有没有更快的选择?


删除 FOR ALL ENTRIES 部分

很可能 WHERE 条件的其余部分具有足够的选择性。您取回的记录多于必要的记录,但是much更快。

As git_kunnr_tab是唯一的,你可以把它变成HASHED表,并过滤git_oi_tab在应用程序服务器上。

SELECT kunnr umsks umskz gjahr belnr buzei bschl shkzg dmbtr bldat
       zfbdt zbd1t zbd2t zbd3t rebzg rebzj rebzz rebzt
    INTO corresponding fields of table git_oi_tab
    FROM bsid
    WHERE bukrs = p_bukrs 
      AND umsks = ' ' 
      AND augdt = clear_augdt 
      AND budat le p_key 
      AND blart in s_blart 
      AND xref3 in s_xref3.

DATA: lt_kunnr_tab TYPE HASHED TABLE of <type of git_kunnr_tab>
          WITH UNIQE KEY kunnr.
lt_kunnr_tab = git_kunnr_tab.
LOOP AT git_oi_tab ASSIGNING FIELD-SYMBOL(<fs_oi>).
  READ TABLE lt_kunnr_tab TRANSPORTING NO FIELDS
      WITH KEY kunnr = <fs_oi>-kunnr.
    IF sy-subrc <> 0
      DELETE git_oi_tab.
    ENDIF.
  ENDIF.
ENDLOOP.
FREE lt_kunnr_tab.

This is not通用解决方案

如果 FAE 驱动程序表包含超过20%目标表的行,完全删除它对速度最有利。
如果行数较少,FAE 是更好的解决方案。

但要小心,删除 FAE 可能会显著地增加生成的内表的内存消耗!

对于所有条目与范围表

你可以在互联网上看到很多地方范围表比 FAE 更快。在一些非常具体的情况下确实如此:

  • Only one field is used from the FAE driver table1
  • 驱动程序表中的行数多于 FAE 在一批中发送的行数
  • 默认情况下,Oracle 中的批处理大小为 5,DB2 中的批处理大小为 50,HANA 中的批处理大小为 100
  • Range 表中的行数不多,不会导致转储
  • 最大长度为 1 048 576 字节(注 1002491)

范围表比 FAE 更快,因为它在一个查询中发送所有过滤条件。这当然是危险的,因为查询的大小是有限的。如果超过设定的限制,您将得到转储。

然而,使用hint MAX_IN_BLOCKING_FACTOR and MAX_BLOCKING_FACTOR您可以为 FAE 提供范围表的所有优点,而无需增加批量大小带来的缺点。

所以只能使用范围表与实际范围, like between A and C, or not between G and J.


  1. 这与速度无关,而是与功能正确性有关。范围表独立处理字段,而 FAE 处理行
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

缓慢选择所有条目 的相关文章

  • ABAP BAPI_ACC_DOCUMENT_POST创建会计凭证

    记录下项目过程中用到BAPI ACC DOCUMENT POST时的问题 1 凭证货币与本币 不一致时 在curr type 里区分本币金额和凭证金额 汇率会自己换算 如果不区分本币和凭证货币 在处理外币时 报错消息如下 Inconsist
  • SAP第二代增强--出口查找(实例)以及使用

    第二代增强 增强查找 增强使用 增强查找 1 以CO02修改生产订单为例 修改好数据后 输入 H打开全局调试模式 2 回车后提示 调试被激活 3 点击保存 触发调试 并在STOP处打好断点 call customer function 4
  • SAP/FICO/BAPI_ACC_DOCUMENT_POST-外币凭证金额和本位币误差问题处理

    场景 通过BAPI ACC DOCUMENT POST创建USD币别凭证SAP会自动带出CNY本位币金额 本位币金额是USD通过SAP配置的汇率计算出来的 有时候会有误差 想要实现的功能 凭证金额和本位币金额都有外部系统传入设置不需要SAP
  • WebService问题,故障及相应解决方法

    WebService是一种常见的SAP与其他系统集成的接口方式 这里记录下遇到的一些问题 故障和解决方法 备查和分享 1 调用WebService接口时 报错 SoapFaultCode 3 MustUnderstand headers h
  • ABAP OPEN SQL详解

    本章目录 概要 OPEN SQL 读取数据 1 概要 1 1 R 3体系结构 学习SQL之前先了解一下R 3体系结构 如 图1 所示 SAP R 3一共分为三层结构 其中应用层和数据库层由单独的系统构成 1 表示层 表示层 Presenta
  • SAP ABAP 中的异步调用

    举例场景 创建采购申请的接口中 在执行完BAPI之后返回了一个PR 接着就会执行到commit提交的接口 然如果还需要在创建的时候直接审批 那么就需要再调用PR审批的BAPI 但是你会发现有的PR 在ME23N查看的时候是审批状态 而有的并
  • 记录一下QM检验批接口,回头补细节

    method ZQM II SI SPCD REC SI SPCD PROCSS INSERT IMPLEMENTATION HERE gt 数据定义部分 TYPES BEGIN OF ty qamv prueflos TYPE qamv
  • 读取带有动态键字段的表?

    我有一张桌子的名字DATA lv tablename TYPE tabname VALUE xxxxx 和一个通用的FIELD SYMBOLS
  • 如何让程序在单击按钮时返回表中的多个表字段?

    我正在尝试创建一个程序 允许用户输入foodCode为了收到Item and Description按下按钮后 有没有办法可以将结果放在同一屏幕上的表格中 如何 report demo tables food SELECTION SCREE
  • 将 ALV 输出网格中的复选框标记为选中

    我正在使用类创建 ALV 输出网格cl gui alv grid 使用 fieldcatalog 的相应记录将输出表的其中一列定义为复选框 ls fcat checkbox X ls fcat edit X 对于包含复选框的列的所有记录 它
  • 在ABAP中找到两个数据集的差异?

    我有一组值 foo bar blue 我有一个看起来像这样的表 ID my col 1 foo 2 bar 我想要设置值减去所有可用的 my col 值 foo bar blue 减去 foo bar 结果应该是 蓝色 在ABAP中如何做到
  • SAP搜索帮助的限制值范围样式

    样式一 点击下拉框 输入筛选数据 筛选搜索帮助列表 样式二 点击漏斗 输入筛选数据 筛选搜索帮助列表 参数设置 不同的样式 通过账号的参数设置决定 第一种样式 没有配置F4METHOD 或者配置了参数值为ActiveX 第二种样式 配置了F
  • 并行模式下的 BAPI_GOODSMVT_CREATE 导致“物料 XXX 的工厂数据已锁定”错误

    目前 我们正在开发并行性的大规模 GI 发布 以显着减少工作时间 因为我们一天必须发布大约 300k 的 GI 项目 Problem 我知道 BAPI GOODSMVT CREATE 有一个限制 由于表锁 您不能同时发布相同的材料 所以我将
  • 通过静态构造函数创建 ALV 时的 NULL 对象引用。为什么?

    我正在尝试运行从教程复制的这个程序 但我在这一行得到 Null 异常 CALL METHOD list gt SET TABLE FOR FIRST DISPLAY 我的理解是列表对象应该在类构造函数中创建 Method CLASS CON
  • 在ABAP中使用自定义消息引发异常

    我正在编写一个通过 RFC 调用的函数 我想找到最简单的方法来在 ABAP 中使用自定义消息引发异常 如果这可以尽可能短地完成 并且可以在一行上完成 那就太好了 我希望它用于调试 而不是用于运行生产代码 背景 过去我使用Python编程语言
  • SELECT 语句中有多个条件?

    首先 我没有 ABAP 经验 我在这里只是猜测 我想向现有报表中的 SELECT 添加条件 现有代码如下所示 SELECT SINGLE FROM EKPO WHERE EBELN GT MSEG EBELN AND EBELP GT MS
  • ABAP 对象中的“ADD-CORRESPONDING”相当于什么?

    对于以下可执行程序 存在以下语法错误 OO 上下文中不支持 ADD CORRESPONDING 相当于什么ADD CORRESPONDING在ABAP对象中 REPORT CLASS lcl app DEFINITION FOR TESTI
  • 方法调用作为另一个方法调用的参数?

    我是abap OO 的新手 但之前用java开发过 并编写了一个abap cl caretaker 类 它应该处理数据库表及其本地副本 实习生表 上的操作 我想进行以下方法调用 caretaker gt show table caretak
  • 标准程序的用途列表

    我正在搜索 SAP 表的使用 我想知道桌子在哪里S083用于 SAP 标准程序 我已经搜索过 使用地点 列表 但我只得到了自创程序 没有得到SAP标准程序 有人知道如何在 SAP 标准程序中搜索表使用吗 为了能够使用 SAP 标准编码的使用
  • 如何找到调用该方法的ABAP程序/FM?

    我是SAP SD模块专家 经常需要调试代码 有时我需要知道哪些程序 FM 地址特定的表 我用使用地点在 SE11 中的表中 它会找到寻址该表的类方法 但是当我使用使用地点对于类方法 系统找不到任何内容 你知道如何找到调用此方法的程序或FM吗

随机推荐

  • 更快地重新连接 CBPeripheral

    我正在开发一个应用程序 它可以多次连接和断开不同的蓝牙低功耗外围设备 经过在互联网上的大量研究 我没有找到一种方法来存储已经发现的服务和特征 以便我可以更快地重新连接 目前 我正在每次重新连接后发现所需的服务和特征 这花费了我 1 5 到
  • 打字稿错误 get 调用需要 0 个类型参数

    我收到打字稿错误预期 0 类型参数 但返回 get 调用的行却得到 1 我的通话有什么问题吗 public get params SummaryParams Observable
  • “OutOfMemoryException”读取 20mb XLSX 文件

    我在用着NPOI https www nuget org packages NPOI 来处理Excel文件 这是我读取文件的方式 using FileStream stream File OpenRead excelFilePath IWo
  • fill-rule="evenodd" 如何在星形 SVG 上工作

    当我试图理解时 我看到了以下 svg 形状fill rule in SVG div class contain demo div
  • 该浮点数小数部分的前 32 位是多少?

    我正在看以下内容SHA256 伪代码 http en wikipedia org wiki SHA 2 SHA 256 28a SHA 2 variant 29 pseudocode在维基百科上 具体来说 我正在查看以下部分 Initial
  • 打印文本而不是 C 枚举中的值

    int main enum Days Sunday Monday Tuesday Wednesday Thursday Friday Saturday Days TheDay int j 0 printf Please enter the
  • EF 映射对象的不兼容数据读取器异常

    我正在使用实体框架并更新了表及其存储过程 但在调用存储过程时出现以下错误 数据读取器与指定的不兼容 FormValueModel Valuation 类型的成员 ValuationId 确实 数据读取器中没有同名的相应列 Valuation
  • 如何设计一个带有需要引用自身的表的数据库?

    我正在构建一个数据库 但遇到了一个我似乎无法解决的问题 数据库比图中复杂得多 但问题可以归纳为下面的表结构 问题是每个员工都有一个经理 每个经理都是员工 看起来这些表必须互相引用 但是 当我设置它时 这似乎无法正常工作 我正在使用cakep
  • 使用单个服务器端变量处理多个复选框

    我有以下 HTML 代码
  • C#:例如集合的封装

    我想知道其中哪一个被认为是最干净或最好用的以及为什么 其中一个公开乘客列表 允许用户添加和删除等 另一个隐藏列表 只允许用户枚举它们并使用特殊方法添加 实施例1 class Bus public IEnumerable
  • Android模拟器源码在哪里

    当我几周前更新 Android Studio 时 不同组件的新版本也会自动更新 与 Android 模拟器的情况一样 我现在的版本 29 2 3 5916265 有一个错误 降级似乎非常非常困难 在最新版本的模拟器中 模拟 GPX 轨道的布
  • Interval 属性更改时 System.Timer 的行为

    我有一个 System Timer 设置 每天凌晨 2 点触发一个事件 如果计时器启动的进程失败那么我想要计时器 重置为每 15 分钟运行一次 直到该过程成功完成 this is how the timer is set up this i
  • String[] 内存使用情况

    我将字符串数组声明为 String items1 new String 5 String items2 new String 20 如果这两个数组都只包含 2 个元素 会对内存和性能产生多大影响 你可以自己测试一下 public stati
  • Spring Security - 即使凭据正确,身份验证也不起作用

    我在我的应用程序中使用 spring security 拦截一些 URL 进行身份验证 虽然网址 securemapping1 通过显示登录页面提示用户登录 但是登录不起作用 即使我提供了正确的凭据 我也会返回登录页面 凭据错误 错误通过调
  • AngularJS 应用程序在 IE 中加载缓慢 - 添加进度条

    UPDATE1 开始使用ngProgress http victorbjelkholm github io ngProgress 但在 IE 中没有给出所需的效果 最终更新 找到最佳解决方案 请参阅下面的最后一个答案 AngularJS 应
  • TreeSet 自定义比较器算法 .. 字符串比较

    从提供的输入字符串 200 400 7 1 100 0 1 1 200 200 3 1 0 400 11 1 407 308 5 1 100 600 9 1 我在 TreeSet 中添加相同的内容 并希望它按第三个元素顺序排序 因此预期输出
  • Mac Excel 2016 VBA - Workbook.open 出现 1004 错误

    我正在尝试让一个在 Excel 2011 for Mac 中完美运行的宏在 Excel 2016 for mac 中运行 目标是让用户指定一个包含 csv 文件的文件夹 然后宏循环遍历所有 csv 文件 打开每个文件将信息从其中复制到另一个
  • 钩子回调时状态不正确

    我正在使用 socket io 和 React hooks 编写一个聊天客户端 消息历史记录 chatMessages 时addMessage 收到消息事件后 调用不正确 始终为空数组 chatMessages确实更新 正确 但在下次调用时
  • 在 VBA (Microsoft Access) 中将标签的“Caption”属性的一部分加粗

    如何将 Microsoft Access 标签标题中的某个单词加粗 如果有帮助 文本本身将存储在 Microsoft Access 表中 下面是一个例子 我有一个带有标签的 Microsoft Access 表单 位于Form Load 事
  • 缓慢选择所有条目

    下面的 SELECT 与内部表一起运行GIT KUNNR TAB包含 2 291 000 条具有唯一客户 kunnr 的行 需要 16 分钟才能完成 select kunnr umsks umskz gjahr belnr buzei bs