LIKE はデータベースにとって非常に恐ろしいものであり、これがループ内にあるため、すべてのループ反復で E071 全体をスキャンする可能性があります。これを入れ替えて、E071 ですべてを選択してから、SELECT...ENDSELECT 内のテーブルをチェックしてください。これは直感に反するように聞こえるかもしれませんが、以前に作成したカスタム REGUH インデックスで私を救ってくれました。
SELECT * FROM e071 APPENDING TABLE gt_e071
WHERE obj_name LIKE gv_obj_name.
READ TABLE tadir WITH KEY.... ASSIGNING <fs_tadir>.
ENDSELECT.
単一の like で選択する代わりに、値の範囲を構築し、それらをまとめて select に送信します。それでもパフォーマンスは低下しますが、改善されます。
data lt_obj_range type range of e071-obj_name.
data ls_obj_range like line of lt_obj_range.
LOOP AT tadir ASSIGNING <fs_tadir>.
ls_obj_range-sign = 'I'.
ls_obj_range-option = 'CP'.
CONCATENATE <fs_tadir>-obj_name '*' INTO ls_obj_range-low.
append ls_obj_range to lt_obj_range.
endloop.
SELECT * FROM e071 APPENDING TABLE gt_e071
WHERE obj_name it lt_obj_range.
DB には select ステートメントのサイズに制限があることに注意してください。範囲内に項目が多すぎる場合は短いダンプが表示されるため、約 200 ~ 300 行の範囲に分割してください。