-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.

任何人都可以帮助提高上述代码的性能。

4

2 回答 2

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 mara~bismt mara~matnr marc~dispo marc ~matnr marc~werks )

-> 创建工作区(首选字段符号)和上述本地类型的内部表(lt_yourtype)

-> 将给定的选择替换为:

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 进入表 lt_yourtype 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 ) 哪里 lqua~bestq 在 sbestq 和 lqua~lgnum 在 slgnum 和 lqua~lgpla 在 slgpla 和 lqua~lgtyp 在 slgtyp 和 lqua~matnr 在 smatnr 和 lqua~werks 在 swerks 和 makt~maktx 在 smaktx 和 makt~spras 在sspras * AND MARA~Bismt 在 Sbismt 和 marc~dispo 在 sdispo。

循环进入 lt_yourtype 分配。

*在此处将数据移动到正确的结构和字段

结束循环。

于 2013-11-13T16:57:48.623 回答
2

您的连接起始表 (LQUA) 没有选择键或索引字段,这总是比您能够使用它们时运行得慢。

虽然似乎没有办法连接关键字段上的所有内容,但如果您将查询调整为最初从 MARA(其中 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 )...
于 2013-11-13T13:24:18.423 回答