ページの先頭行へ戻る
Symfoware Server V10.0.0 アプリケーション開発ガイド(共通編)

3.3.1 インデックスを定義する

インデックスを付加すると、データの検索処理の効率を上げることができます。逆に、アプリケーションでの処理が、インデックスを構成する列の更新や、データの挿入、データの削除を主体としている場合は、インデックスの更新処理が行われるため、処理効率が低下することがあります。インデックスの設計は、これらを考慮し、必要なインデックスを検討しなければなりません。

インデックスの設計手順を以下に示します。

  1. 探索条件の列挙

  2. インデックスの定義

  3. インデックスの定義順序の決定

参考

本マニュアルでは、インデックスを以下のように表現することがあります。

  • 1つの列から構成されるインデックスの場合
    C1を列名リストに指定したインデックスです。以下のようなインデックスのDSO定義文で定義されたインデックスを意味します。

    CREATE DSO TBL1_IX1_DSO INDEX ON SCM1.TBL1(C1)
     TYPE BTREE (PAGESIZE1(4),PAGESIZE2(4))
  • 複数の列から構成されるインデックスの場合
    C1、C2、C3を列名リストに指定したインデックスです。以下のようなインデックスのDSO定義文で定義されたインデックスを意味します。マルチカラムインデックスと呼ぶこともあります。

    CREATE DSO TBL1_IX1_DSO INDEX ON SCM1.TBL1(C1,C2,C3)
     TYPE BTREE (PAGESIZE1(4),PAGESIZE2(4))

1.探索条件の列挙

アプリケーションで検索、更新する際の探索条件をすべて列挙します。

2.インデックスの定義

アプリケーションでのデータベースの検索、更新処理において、WHERE探索条件に指定する検索や更新のキーとなる列と、表の結合条件となる列にはインデックスを定義します。

ブール演算子“OR”で条件を指定している場合は、“OR”で指定した各々の条件ごとにインデックスの定義を検討します。


1

この場合、TIDユニオンマージのアクセスモデルが動作します。(C1,C2)のマルチカラムインデックス(複数の列から構成されるインデックス)を定義しても、インデックスは利用されないので、C1とC2は別々のインデックスとして定義してください。

TIDユニオンマージについては、“TIDユニオンマージ”を参照してください。

2

注意

NOTと他の述語を一緒に使用した場合や、述語中に算術演算を指定した場合は、その列を先頭に持つインデックスを定義していても、インデックスは利用しません。
単独で条件として指定される列でも、たとえば性別のように、異なるキー値数が極端に少ないものにはインデックスを定義しないようにしてください。

3.定義順序の決定

マルチカラムインデックスを定義する時は、列の定義順序を決定します。