二级索引可以在INNER JOIN的SELECTION上提供帮助吗?

时间:2019-06-05 12:41:00

标签: sap abap

我有以下选择语句:

SELECT VEKP~EXIDV VEKP~VENUM VEKP~LGNUM
       VEKP~PKTYP VEKP~PKPLA VEKP~PKBER
       VEKP~DATAB VEKP~TIMAB VEKP~DATBI VEKP~TIMBI
       VEKP~BTVOL VEKP~NTVOL VEKP~VOLEH_MAX
       VEKP~TAVOL VEKP~VOLEH
       VEKP~BRGEW VEKP~NTGEW VEKP~GEWEI_MAX
       VEKP~TARAG VEKP~GEWEI
       VEKP~VEGR1 VEKP~VEGR2 VEKP~VEGR3 VEKP~VEGR4
       VEKP~ARBZEIT VEKP~UNITARBZEIT
       VEKP~PACKERID VEKP~PACKERID2 VEKP~PACKERID3
       VEKP~PACKERID4 VEKP~PACKERID5
       VEKP~PACKVORSCHR VEKP~VHILM
       VEPO~WERKS VEPO~MATNR VEPO~VELIN VEPO~UNVEL
  FROM VEKP INNER JOIN VEPO
    ON VEKP~VENUM = VEPO~VENUM
  INTO CORRESPONDING FIELDS OF TABLE LT_HU_CLASSICAL
 WHERE ( VEKP~PKBER IN IS_SELECT_OPTIONS-PKBER
   AND VEKP~DATBI IN IS_SELECT_OPTIONS-DATBI
   AND VEKP~PKPLA IN IS_SELECT_OPTIONS-PKPLA
   AND VEKP~TIMBI IN IS_SELECT_OPTIONS-TIMBI
   AND VEPO~WERKS IN IS_SELECT_OPTIONS-WERKS
   AND VEPO~MATNR IN IS_SELECT_OPTIONS-MATNR
   AND VEPO~VELIN = '1'
   AND VEKP~EXIDV IN IS_SELECT_OPTIONS-EXIDV )
   OR
   (  VEKP~PKBER IN IS_SELECT_OPTIONS-PKBER
  AND VEKP~DATBI IN IS_SELECT_OPTIONS-DATBI
  AND VEPO~VELIN NOT IN ('1','2')
  AND VEKP~EXIDV IN IS_SELECT_OPTIONS-EXIDV )
ORDER BY VEKP~EXIDV.

基于调试,仅VEPO-WERKS,VEKP-DATBI和VEKP-PKBER的选择选项包含数据。 DATBI使用带有EQ的单个值。

这句话是放慢脚步的方式,我的问题是:

如果我为VEKP(具有选定的字段)创建二级索引,为VEPO(具有选定的字段)创建二级索引,这会提高select语句的性能吗?

还是我应该尝试其他东西?

1 个答案:

答案 0 :(得分:2)

仅凭此信息就不可能提供最佳索引

WHERE条件中的大多数字段都是选择选项,因此无法知道其中的内容,或者对于单个查询而言它们是否完全为空。
OR只会使情况变得更糟。

应该应该做什么

在生产系统中使用ST12或ST05跟踪执行缓慢,或检查ST04。在这些地方,您将看到实际使用的字段以及使用的模式。

您需要使索引适合实际使用情况。

权宜之计

根据我的经验,字段EXIDV具有很强的选择性,并且在ORDER BY中使用。
使用字段[PKBER,DATBI,VENUM,EXIDV] 1 在VEKP上创建新索引应该会有所帮助。


1)完全按照顺序排列,没有MANDT