コンテンツフレーム起動

検索間接費の最小化 文書を SAP ライブラリストラクチャに組み込む

結果セットのサイズを最小化するには、WHERE 句と HAVING 句を使用します。これらの句を利用して、効率を上げるには、データベーステーブルの索引に適合するよう数式化する必要があります。

データベースの索引

索引により、データベースからの選択を短時間で実行できます。索引はテーブルの選択項目で構成され、そのコピーが ソート順に作成されます。WHERE 句または HAVING 句内の条件で正しく索引項目を指定した場合、索引の一部だけが検索されます (索引範囲スキャン)

R/3 システムでは、一次索引が常に自動登録されます。一次索引はデータベーステーブルの一次キー項目で構成されます。つまり索引内の項目の組み合わせごとに、テーブル内に最大 1 行があることになります。この種の索引を、UNIQUE と呼んでいます。

一次索引を結果セットの設定に使用することはできません。これはたとえば、WHERE 句または HAVING 句内に一次索引項目がない場合、テーブル全体を通して検索が行われるためです (全テーブルスキャン)。この場合は二次索引を登録して、結果セットを形成するために検索されるテーブルエントリの数を制限することができます。

二次索引項目を指定するには、ABAP ディクショナリ を使用します。また索引を一意とするかどうかを設定することもできます。ただし、可能な項目の組み合わせをすべて含むような二次索引の登録は、行わないでください。

別の索引に含まれない項目でデータを選択する場合で、パフォーマンスが非常に低い場合に限り、登録を行ってください。またデータベーステーブルが変更されるたびに索引も更新する必要があるので、主に読込を行うデータベーステーブルに対してのみ、二次索引の登録を行ってください。原則として二次索引に含まれる項目は 4 つ以下で、1 つのデータベーステーブルに登録する索引は 5 つ以下にする必要があります。

1 つのテーブルに 5 つを超える索引があると、オプティマイザが特定の操作に対して間違った索引を選択するリスクを負うことになります。このため、コンテンツが重複した索引を作らないようにする必要があります。

二次索引に含める列は、選択する際によく使用するものを極力厳選してください。ある列が選択できるテーブルエントリが少なければ少ないほど、その列の選択度は高くなります。索引の先頭には、最も厳選した項目を割当てます。二次索引は、各索引エントリのテーブルエントリに対応する比率が 5 パーセント以下になるよう、厳選する必要があります。それ以外の場合は、索引を作ってもむだです。また、必ず書き込まれているとは限らない項目で、その値がテーブル内のほとんどのエントリに対して初期値であるものには、索引を登録しないようにしてください。

SELECT 句内のすべての列が索引に含まれている場合は、索引から読み込んだあとに実際のテーブルデータの検索を行う必要がなくなります。SELECT 句の列が非常に少ない場合は、それらの列を二次索引に含めることで、パフォーマンスを飛躍的に向上させることができます。

索引のための条件の数式化

検索にデータベース索引を使用でき、全テーブルスキャンを使わずにすむよう WHERE 句および HAVING 句の条件を数式化する際は、以下のことに留意してください。

等式のチェックと AND を使用した連結

索引項目のすべてについて等式 (= または EQ) をチェックし、AND を使って式を連結すると、データベース索引の検索は特に効率がよくなります。

肯定条件の使用

データベースシステムがサポートするのは EQ LIKE など、結果を肯定条件で表すクエリのみです。NE NOT LIKE などの否定式はサポートしていません。

NOT 演算子はデータベース索引でサポートされていないため、できれば WHERE 句に使用するのは避けてください。代わりに論理式を反転してください。

OR の使用

通常、オプティマイザは OR 式が条件内に出現すると機能を停止します。つまり OR を使用してチェックされた列は、索引検索には含まれません。この例外は、OR 式が条件の外にある場合です。OR 式を索引に関連する列に適用する条件は、IN 条件にするなど、数式化をやり直してください。

索引の部分使用

複数の列から索引を構成した場合、条件内のいくつかの列のみを指定したとしても、その索引は使用できます。ただしこの場合、索引内の列の順序が重要です。列を索引検索に使用できるのは、索引定義内のその前にある列もすべて条件に指定されている場合だけです。

ヌル値のチェック

IS NULL 条件は、索引で問題となる可能性があります。データベースシステムによっては、索引構造にヌル値を格納しない場合があります。したがって、この項目は索引には使用できません。

複合条件の回避

複合条件は、データベースシステムによって文が個々のコンポーネントに分解される必要があるので、使用しないようにしてください。 

 

 

 

 

 

コンテンツフレーム終了