Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Abap 二级索引可以帮助选择内部联接吗?_Abap_Opensql - Fatal编程技术网

Abap 二级索引可以帮助选择内部联接吗?

Abap 二级索引可以帮助选择内部联接吗?,abap,opensql,Abap,Opensql,我有以下select语句: 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 VEK

我有以下select语句:

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的select选项包含数据。DATBI使用一个值,其公式为

这句话很慢,我的问题是:

如果我为VEKP(带有所选字段)创建一个二级索引,并为VEPO(带有所选字段)创建另一个二级索引,这会提高select语句的性能吗

还是我应该尝试其他方法?

仅凭这些信息无法提供最佳索引 WHERE条件中的大多数字段都是select选项,因此不可能知道其中的内容,也不可能知道它们对于单个查询是否完全为空。
否则只会让事情变得更糟

你该怎么办 在生产系统中,使用ST12或ST05跟踪慢速执行,或检查ST04。在这些地方,您将看到实际使用了哪些字段,以及使用了什么模式

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

权宜之计 根据我的经验,字段EXIDV是非常有选择性的,它按顺序使用。
在VEKP上创建一个包含[PKBER、DATBI、VENUM、EXIDV]1字段的新索引应该会有所帮助


1) 按照这个确切的顺序,如果没有MANDT

就不可能仅从这些信息提供最佳索引 WHERE条件中的大多数字段都是select选项,因此不可能知道其中的内容,也不可能知道它们对于单个查询是否完全为空。
否则只会让事情变得更糟

你该怎么办 在生产系统中,使用ST12或ST05跟踪慢速执行,或检查ST04。在这些地方,您将看到实际使用了哪些字段,以及使用了什么模式

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

权宜之计 根据我的经验,字段EXIDV是非常有选择性的,它按顺序使用。
在VEKP上创建一个包含[PKBER、DATBI、VENUM、EXIDV]1字段的新索引应该会有所帮助




1) 按照这个顺序,没有命令,你为什么不自己试试看呢?但是,请记住,如果要在其上创建二级索引的表是一个数据频繁更改或增加的表,则数据库更新此类索引可能是一个挑战。我在质量系统中没有相关的测试数据,因此我不想在不知道是否有帮助的情况下直接在生产系统中尝试。但是,是的,这些表中的数据经常变化。数据库通常会计算SQL查询的执行计划,并将其存储,因此您应该在生产系统中获取它(在数据库级别,或通过ST04(N)),分析它并采取适当的措施。我们不能为你做这件事。有专门讨论SQL性能问题的论坛。数据库上存在索引,因此索引的确切效果主要取决于您使用的数据库。此外,您还有很多选择选项。您是使用所有的还是只使用特定的?您是否检查过哪些选择选项的组合是最常见的,哪些会导致最严重的性能问题?您使用的是什么数据库?为什么不自己尝试一下,看看呢?但是,请记住,如果要在其上创建二级索引的表是一个数据频繁更改或增加的表,则数据库更新此类索引可能是一个挑战。我在质量系统中没有相关的测试数据,因此我不想在不知道是否有帮助的情况下直接在生产系统中尝试。但是,是的,这些表中的数据经常变化。数据库通常会计算SQL查询的执行计划,并将其存储,因此您应该在生产系统中获取它(在数据库级别,或通过ST04(N)),分析它并采取适当的措施。我们不能为你做这件事。有专门讨论SQL性能问题的论坛。数据库上存在索引,因此索引的确切效果主要取决于您使用的数据库。此外,您还有很多选择选项。您是使用所有的还是只使用特定的?您是否检查了哪些选择选项的组合是最常见的,哪些组合会导致最严重的性能问题?您使用的数据库是什么?如果有帮助,请告诉我实际使用的字段是:1。维波-沃克斯,2。VEKP-DATBI和3.VEKP-PKBER。我已经有了一个包含WERKS和VENUM的VEPO索引。我还应该在VEKP索引中包含EXIDV吗?我不太理解第一个问题。PKBER和DATBI只有一个值。@OvidiuPocnet选择选项在应用程序服务器端看起来像是中的一个
,但从数据库中看,它可以是
=
之间的
不像
,等等。在查看实际使用的字段时,还应该查看它们是否与
=
一起使用。@OvidiuPocnet,另外,我想知道数据库中PKBER和DATBI字段中有多少不同的值。希望没有。让我知道它是否有用。实际使用的字段是:1。维波-沃克斯,2。VEKP-DATBI和3.VEKP-PKBER。我已经有了一个包含WERKS和VENUM的VEPO索引。我还应该在VEKP索引中包含EXIDV吗?我不太理解第一个问题。PKBER和DATBI只有一个值。@OvidiuPocnet选择选项在应用程序服务器端看起来像是
中的一个
,但从数据库中看,它可以是
=
之间的
不像
,等等。在查看实际使用的字段时,还应该查看它们是否与
=
一起使用。@OvidiuPocnet,另外,我想知道数据库中PKBER和DATBI字段中有多少不同的值。希望没有。