【推荐】ABAP select语句性能优化之高级教程


select where条件顺序影响sql执行效率,本例中条件包含必输、等于、不等于、可输等,他们的顺序随便排列么?
CASE:
  1. SELECT-OPTIONS: s_bukrs FOR t001-bukrs OBLIGATORY DEFAULT 'H100',"公司代码
  2.                 s_vkorg FOR vbak-vkorg OBLIGATORY DEFAULT 'H100',"销售组织
  3.                 s_vtweg FOR vbak-vtweg OBLIGATORY DEFAULT '50',"分销渠道
  4.                 s_spart FOR vbak-spart,           "产品组
  5.                 s_matnr FOR mara-matnr.           "商品编码

  6. SELECT k~erdat
  7.      p~vbeln
  8.      p~posnr
  9.      p~matnr
  10.      p~pstyv
  11.      p~kwmeng
  12.      p~erdat AS erdat_p
  13.      p~kzwi1
  14. INTO TABLE gt_vbkp
  15. FROM vbak AS k
  16. INNER JOIN vbap AS p ON p~vbeln = k~vbeln
  17. WHERE k~erdat <= lv_erdaten
  18. AND k~erdat >= lv_erdatbe
  19. AND k~vkorg IN s_vkorg
  20. AND k~vtweg IN s_vtweg
  21. AND k~spart IN s_spart
  22. AND p~matnr IN s_matnr
  23. AND p~pstyv = 'ZTAN'.
复制代码
select语句需要注意以下几点:
1、小表关联大表
2、有索引走索引,若果数据量大,自建适合的索引
3、等于、必输r_range放在最前,不等于放在中间、可输放在最后
4、条件字段的顺序尽量和数据字典
中顺序一致
优化之后:

  1. SELECT k~erdat
  2.        p~vbeln
  3.        p~posnr
  4.        p~matnr
  5.        p~pstyv
  6.        p~kwmeng
  7.        p~erdat AS erdat_p
  8.        p~kzwi1
  9. INTO TABLE gt_vbkp
  10. FROM vbak AS k
  11. INNER JOIN vbap AS p ON p~vbeln = k~vbeln
  12. WHERE k~vkorg IN s_vkorg
  13.   AND k~vtweg IN s_vtweg
  14.   AND p~pstyv = 'ZTAN'
  15.   AND k~erdat <= lv_erdaten
  16.   AND k~erdat >= lv_erdatbe
  17.   AND k~spart IN s_spart
  18.   AND p~matnr IN s_matnr.
相关文章

相关标签/搜索