Может ли вторичный индекс помочь при ВЫБОРЕ с INNER JOIN? - PullRequest
0 голосов
/ 05 июня 2019

У меня есть следующий оператор выбора:

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 использует одно значение с эквалайзером.

Этот оператор является медленным, и мой вопрос:

Если я создаю вторичный индекс для VEKP (с выбранными полями) и другой вторичный индексдля VEPO (с выбранными полями) это увеличит производительность оператора select?

Или я должен попробовать что-то еще?

1 Ответ

2 голосов
/ 07 июня 2019

Невозможно предоставить лучший индекс только из этой информации

Большинство полей в условии WHERE являются опциями выбора, поэтому невозможно узнать, что в них, или они полностью пусты для отдельного запроса.
ИЛИ только усугубляет ситуацию.

Что вы должны делать

В производительной системе отследите медленное выполнение с помощью ST12 или ST05 или проверьте ST04. В этих местах вы увидите, какие поля на самом деле используются и с каким шаблоном.

Вам нужно подогнать индекс к фактическому использованию.

В качестве временного промежутка

По моему опыту, поле EXIDV довольно избирательно и используется в ORDER BY.
Создание нового индекса на VEKP с полями [PKBER, DATBI, VENUM, EXIDV] 1 должно помочь.


1) в этом точном порядке, без MANDT

...