2013-11-13 5 views
-3
(....) 
DATA: BEGIN OF g00 OCCURS 100, 
      werks LIKE lqua-werks, 
      lgort LIKE lqua-lgort, 
      matnr LIKE lqua-matnr, 
      charg LIKE lqua-charg, 
      maktx LIKE makt-maktx, 
      verme LIKE lqua-verme, 
      meins LIKE lqua-meins, 
      dispo LIKE marc-dispo, 
     END OF g00. 
(.....) 
CLEAR : g00. 
    REFRESH : g00. 
    SELECT lqua~bestq lqua~charg lqua~lgort lqua~lgnum lqua~lgpla 
lqua~lgtyp lqua~matnr lqua~meins lqua~verme lqua~werks makt~maktx 
     makt~matnr makt~spras mara~bismt mara~matnr marc~dispo 
     marc~matnr marc~werks 
    INTO (lqua-bestq , lqua-charg , lqua-lgort , lqua-lgnum , lqua-lgpla , 
lqua-lgtyp , lqua-matnr , lqua-meins , lqua-verme , lqua-werks , 
makt-maktx , makt-matnr , makt-spras , mara-bismt , mara-matnr , 
marc-dispo , marc-matnr , marc-werks) 
    FROM (lqua 
     INNER JOIN makt 
     ON makt~matnr = lqua~matnr 
     INNER JOIN mara 
     ON mara~matnr = makt~matnr 
     INNER JOIN marc 
     ON marc~werks = lqua~werks 
     AND marc~matnr = lqua~matnr) 
     WHERE lqua~bestq IN sbestq 
      AND lqua~lgnum IN slgnum 
      AND lqua~lgpla IN slgpla 
      AND lqua~lgtyp IN slgtyp 
      AND lqua~matnr IN smatnr 
      AND lqua~werks IN swerks 
      AND makt~maktx IN smaktx 
      AND makt~spras IN sspras 
*   AND MARA~BISMT IN Sbismt 
      AND marc~dispo IN sdispo. 
    MOVE-CORRESPONDING mara TO g00. 
    MOVE-CORRESPONDING makt TO g00. 
    MOVE-CORRESPONDING marc TO g00. 
    MOVE-CORRESPONDING lqua TO g00. 
    COLLECT g00. 
    ENDSELECT. 

Может ли кто-нибудь помочь улучшить производительность кода выше.Выбор заявления с внутренним соединением берется навсегда

+0

какая RDBMS работает? Вы должны пометить его в своем вопросе. –

ответ

2

Ваша стартовая таблица для соединения (LQUA) не выбирает ключевые или индексированные поля, которые всегда будут работать медленнее, чем если вы сможете их использовать.

В то время как представляется, не быть способ, чтобы присоединиться все на ключевых областях, вы, возможно, повезет больше, если вы настроить запрос сначала вытащить из МАРА (где MATNR является ключевым полем):

FROM (mara 
     INNER JOIN makt 
     ON makt~matnr = mara~matnr 
     INNER JOIN lqua 
     ON lqua~matnr = mara~matnr 
     INNER JOIN marc 
     ON marc~werks = mara~werks 
     AND marc~matnr = mara~matnr)... 
2

НЕ используйте SELECT END SELECT в описанном ниже сценарии. Попробуйте сделать следующее:

-> Создание локального типа с полями вы подбирая выберите (lt_yourtype)

(lqua ~ bestq lqua ~ CHARG lqua ~ lgort lqua ~ lgnum lqua ~ lgpla lqua ~ lgtyp lqua ~ MATNR lqua ~ Meins lqua ~ Verme lqua ~ Werks makt ~ maktx makt ~ MATNR makt ~ spras мара ~ bismt мара ~ MATNR МАРК ~ Dispo Марк ~ MATNR Марк ~ Werks)

-> Создать рабочую область (предпочитать полевой символ) и внутренней таблицы вышеуказанного местного типа (lt_yourtype)

- > Заменить данный выбор с:

выберите lqua ~ bestq lqua ~ CHARG lqua ~ lgort lqua ~ lgnum lqua ~ lgpla lqua ~ lgtyp lqua ~ MATNR lqua ~ Meins lqua ~ Verme lqua ~ Werks makt ~ maktx makt ~ MATNR makt ~ spras мара ~ bismt мара ~ MATNR Марк ~ Dispo Марк ~ MATNR Марк ~ Werks в таблицу lt_yourtype ОТ (lqua INNER JOIN makt ПО makt ~ MATNR = lqua ~ MATNR INNER JOIN мара ПО мара ~ MATNR = makt ~ matnr INNER JOIN marc ON marc ~ werks = lqua ~ werks И marc ~ matnr = lqua ~ matnr) WHERE lqua а ~ bestq В sbestq И lqua ~ lgnum В slgnum И lqua ~ lgpla В slgpla И lqua ~ lgtyp В slgtyp И lqua ~ MATNR В smatnr И lqua ~ Werks В swerks И makt ~ maktx В smaktx И makt ~ spras IN sspras * AND MARA ~ BISMT IN Sbismt И marc ~ dispo IN sdispo.

loop in lt_yourtype присвоение.

* Перенести данные в правильной структуры и поля здесь

ENDLOOP.

Смежные вопросы