针对各种数据库表验证数据的性能



我的问题:

我"loop"

将一个表复制到一个名为ls_eban的本地结构体。

有了这些信息,我必须遵循以下说明:

  1. ls_eban-matnr 必须在表zmd_scmi_st01中。控制表(global))
  2. ls_eban-werks 必须在表zmd_scmi_st05中控制表(global))
  3. ls_eban-knttp 必须在表zmd_scmi_st06中控制表(global))

我需要一个清晰和高效的选择。我实际上有一个,但是它根本没有性能。

我的解决方案:

SELECT st01~matnr st05~werks st06~knttp
  FROM       zmd_scmi_st01 AS st01
  INNER JOIN zmd_scmi_st05 AS st05
  ON         st05~werks = ls_eban-werks
  INNER JOIN zmd_scmi_st06 AS st06
  ON         knttp = ls_eban-knttp
INTO TABLE   lt_control
WHERE        st01~matnr = ls_eban-matnr AND st01~bedarf = 'X'
  AND        st05~bedarf = 'X'.

我还必须说,控制表之间没有任何关系(没有主键和从键)。

首先不应该在循环中使用select。而不是

loop at lt_eban into ls_eban.
      Select ....
endloop.

你应该做一个单一的选择。

if lt_eban[] is not initial.
   select ...
     into table ...
     from ...
      for all entries in lt_eban
    where ...
endif.

如果我们有更多的信息(正如vwegert在评论中提到的),可能会有更多的低效需要纠正。例如,控制表上真的没有键吗?)但是循环中的select是我首先想到的

相关内容

  • 没有找到相关文章

最新更新