查询性能提升

2020-08-19 01:56发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家您好, 我有一个非常老的查...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我有一个非常老的查询,需要在ECC中进行优化。 请帮助我。

选择区别
 vbak〜vbeln"销售单据编号vbak
 vbak〜kunnr"售出方vbak
 vbak〜auart"销售凭证类型
 vbap〜matnr"材料编号vbap
 vbap〜posnr"销售订单中的项目号vbap
 vbfa〜vbeln"交货编号
 vbfa〜posnn"交货中的项目编号
 vbfa〜rfmng"实际交付的数量(以销售单位为单位)
 vbap〜kwmeng"销售单位中的累计订单数量vbap
 vbak〜vdatu"要求的交货日期vbak
 vbkd〜bstkd"客户采购订单号
 vbap〜abgru"拒绝原因

 进入表gt_so

 来自vbak
 加入vbap ON vbak〜vbeln = vbap〜vbeln
 JOIN平均值ON vbap〜matnr =平均值〜matnr
 在vbak〜vbeln上加入vbkd = vbkd〜vbeln
 左外连接vbfa ON vbfa〜vbelv = vbap〜vbeln
 AND vbfa〜posnv = vbap〜posnr
 与vbfa〜vbtyp_n EQ gc_j

 在哪里vbak〜auart EQ gv_auart
 AND vbak〜vbeln输入s_vbeln
 AND vbak〜erdat IN s_erdat
 和s_vdatu中的vbak〜vdatu
 AND s_bstkd中的vbkd〜bstkd
 和s_matnr中的vbap〜matnr
 AND mean〜ean11在s_ean11中
 AND mean〜eantp IN s_eantp。

干杯

LLD

5条回答
me_for_i
2020-08-19 02:37
  1. 您的查询是由主键或至少是主键的开始部分联接的,所以这很好,没有一种更好的方法通过单个select和join语句联接它们
  2. < li>您的位置限制"到处都是",这就是为什么您会在几个用例中表现不佳,除非某些限制是强制性的。
    a)例如,如果VBAK-VBELN是 不是强制性的,您将需要通过其他辅助键进行访问,以实现索引搜索,并且不会以顺序搜索结束。
    b)如果VBAK-ERDAT是强制性的,则需要确保VBAK-Index" 在数据库上激活了"用于订单输入日期的ERD索引"(或在可能的情况下,将AUDAT与索引AUD或ERDAT一起使用)如果没有任何限制或其他限制是必需的,则需要确保所有 强制性的,将访问数据库表上的辅助键,很可能您将必须为所有限制创建扩展索引
    d)如果您 您在VBAP〜MATNR上没有活动索引,您要么必须创建/活动索引,要么将where要求从" vbap〜matnr IN s_matnr"切换为" mean〜matnr IN s_matnr"
  3. 通过使用ST05 SQL跟踪来分析需要"优化"的查询,在发送SQL语句之前先激活它,然后立即取消激活,查看跟踪,选择对象名称为" VBAK,VBAP,MEAN,VBKD,VBFA"的记录 单击"打开"(OPEN)操作并通过"解释"(Explain)按钮显示"执行计划",以更好地理解基于where和join条件执行SQL语句的方式。 有关如何解释执行计划的更多信息,请打开以下链接,尤其是查看提供的博客: https://wiki.scn.sap.com/wiki/display/ABAP/Explain+Plan
  4. 如果由于某种原因,SQL解释器无法优化连接,您 继续以顺序读取结束,您可能不得不考虑根据使用的选择选项为不同的限制条件创建不同的选择语句。 我认为,强迫用户使用导致索引值的条件,并让SQL解释器找出必要的优化联接就足够了。

发布使您受益最多的执行计划 现在麻烦了。 还请告诉我们,正在使用什么数据库,因为这会对执行计划的可用功能产生影响。

一周热门 更多>