我有以下选择语句:
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语句的性能吗?
还是我应该尝试其他东西?
答案 0 :(得分:2)
WHERE条件中的大多数字段都是选择选项,因此无法知道其中的内容,或者对于单个查询而言它们是否完全为空。
OR只会使情况变得更糟。
在生产系统中使用ST12或ST05跟踪执行缓慢,或检查ST04。在这些地方,您将看到实际使用的字段以及使用的模式。
您需要使索引适合实际使用情况。
根据我的经验,字段EXIDV具有很强的选择性,并且在ORDER BY中使用。
使用字段[PKBER,DATBI,VENUM,EXIDV] 1 在VEKP上创建新索引应该会有所帮助。
1)完全按照顺序排列,没有MANDT