需要优化超过200,000条记录的简单循环

pra*_*ian 4 sql oracle optimization abap

我想知道是否有人可以优化以下代码:

LOOP AT dispinstock.
  SELECT matnr SUM( gesme ) SUM( verme ) SUM( einme ) SUM( ausme )
         INTO (dispinstock-matnr, dispinstock-gesme,
               dispinstock-verme, dispinstock-einme, dispinstock-ausme)
         FROM lqua
         WHERE matnr = dispinstock-matnr
         AND lgnum = 'xxxxx'
         AND ( lgtyp IN zsd_t301_n
          OR ( lgtyp >= '900' AND lgtyp <= '903' ) )
          GROUP BY matnr.
    MODIFY dispinstock.
  ENDSELECT.
ENDLOOP.
Run Code Online (Sandbox Code Playgroud)

发现170.000条记录,

LQUA 210.000记录(将很快> 1.500.000记录)

这个循环需要3分钟以上.使用散列表会更好吗?任何帮助或想法将不胜感激.

Bry*_*ain 7

从循环中取出选择 - 将您需要的所有数据从lqua中拉入单个select语句中的单独内部表中.然后在循环内的第二个表上读取.使用散列/排序表或使用二进制搜索.