1

2 つのテーブルを結合して内部テーブルにデータを取得しようとしてcovp_itabいますが、非常に時間がかかります。さらに、両方のテーブルに定義されているデータベース ビューからデータを取得しようとしましたが、COVP非常に時間がかかりました。

SELECT bk~kokrs
       bk~belnr
       bk~budat
       bk~cpudt
       bk~bltxt
       ep~buzei
       ep~wkgbtr
       ep~objnr
       ep~gjahr
       ep~kstar
       ep~vrgng
       ep~parob1
       ep~beknz
       ep~sgtxt
       ep~objnr_n1
       ep~bukrs
INTO TABLE covp_itab
FROM cobk AS bk
INNER JOIN coep AS ep ON (bk~kokrs = ep~kokrs AND bk~belnr = ep~belnr)
WHERE bk~kokrs     = co_kokrs
AND   ep~wrttp     = '04'
AND   ep~kstar     IN s_kstar
AND   ep~vrgng     IN s_vrgng 
AND   ep~bukrs     IN r_bukrs
AND   bk~timestamp IN r_stamp.

ここで何が問題になる可能性がありますか?

4

1 に答える 1

1

ジャガーが述べたように、これらのテーブルのいずれかで標準インデックスを利用できる基準を使用していません。私は物事の組み合わせを行います:

  • SE11 を使用して、COEP で使用できるインデックスを調査し、それらのインデックスの 1 つを使用する (追加の基準を使用して) 選択を定式化できないかどうかを確認します。フィールドのデータを順番に提供することが重要です。つまり、インデックス COEP~2 の場合、フィールドは MANDT/OBJNR/KSTAR/GJAHR/PERIO/PAROB1 です。OBJNR を提供できないが、KSTAR、GJAHR などがある場合、OBJNR がないため、インデックスは使用されません。ただし、MANDT と OBJNR しかない場合は、このインデックスを使用できる可能性があります。
  • bk~kokrs を ep~kokrs に変更し、select を COEP から読み取るように変更してから、COBK に参加します。
  • (現在) 5 つの基準がある 1 つの COEP レコードについては、SE16 に移動し、それらの選択を入力して実行し、所要時間を確認します。クエリがキャッシュされる可能性があり、その後の実行が高速になる可能性があることに注意してください。可能であれば、別の値を使用してみてください。
  • 必要に応じて、COEP に追加のインデックスを作成します。これらには挿入と更新のコストがかかるため、select ステートメントが遅い場合は常にインデックスを作成することはお勧めできません。
  • インデックスを作成しても状況が改善されない場合は、トランザクション ST05 を使用して SQL トレースを実行することにより、使用されているインデックス (存在する場合) を見つけることができます。
于 2016-01-23T17:50:12.470 に答える