Performance 针对各种数据库表验证数据的性能
我的问题是: 我将表“循环”到名为ls_eban的本地结构中 有了这些信息,我必须遵循以下说明:Performance 针对各种数据库表验证数据的性能,performance,abap,opensql,Performance,Abap,Opensql,我的问题是: 我将表“循环”到名为ls_eban的本地结构中 有了这些信息,我必须遵循以下说明: ls_eban-matnr必须在表zmd_scmi_st01(1.控制表(全局))中 ls_eban-werks必须在表zmd_scmi_st05中(2.控制表(全局)) ls_eban-knttp必须在表zmd_scmi_st06中(3.控制表(全局)) 我需要一个选择是明确和性能。我确实有一个,但它一点性能都没有 我的解决方案: SELECT st01~matnr st05~werks st06
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在评论中提到的,例如,控制表上真的没有键?),可能会有更多的低效率需要纠正,但循环中的选择是我首先想到的。能否请您向我们展示完整的代码示例以及所有相关表的结构?我只能猜测你的问题可能是什么,你不想得到一个纯粹是猜测的“答案”…如果3个控制表彼此没有关系,你就不应该加入它们。对每个规则进行单独的选择。此外,由于控制表的性质,它们通常是相对较小的表,因此您可以将每个表中的所有条目选择到一个单独的内部表中,然后在循环内部执行读取。感谢您的回复。实际上,循环中的选择是有效的:)但我会按你的方式尝试。。下周一,因为现在我回家了:D再次感谢:)非常友好!