インデックスを付加すると、データの検索処理の効率を上げることができます。逆に、アプリケーションでの処理が、インデックスを構成する列の更新や、データの挿入、データの削除を主体としている場合は、インデックスの更新処理が行われるため、処理効率が低下することがあります。インデックスの設計は、これらを考慮し、必要なインデックスを検討しなければなりません。
インデックスの設計手順を以下に示します。
探索条件の列挙
インデックスの定義
インデックスの定義順序の決定
参考
本マニュアルでは、インデックスを以下のように表現することがあります。
1つの列から構成されるインデックスの場合
C1を列名リストに指定したインデックスです。以下のようなインデックスのDSO定義文で定義されたインデックスを意味します。
CREATE DSO TBL1_IX1_DSO INDEX ON SCM1.TBL1(C1) TYPE BTREE (PAGESIZE1(4),PAGESIZE2(4))
1つの列から構成されるインデックスの場合(データベース簡単運用の場合)
C1を列名リストに指定したインデックスです。データベース簡単運用の場合は、以下のようなCREATE INDEX文で定義されたインデックスを意味します。
CREATE INDEX SCM1.TBL1.IX1 KEY(C1)
複数の列から構成されるインデックスの場合
C1、C2、C3を列名リストに指定したインデックスです。以下のようなインデックスのDSO定義文で定義されたインデックスを意味します。マルチカラムインデックスと呼ぶこともあります。
CREATE DSO TBL1_IX1_DSO INDEX ON SCM1.TBL1(C1,C2,C3) TYPE BTREE (PAGESIZE1(4),PAGESIZE2(4))
複数の列から構成されるインデックスの場合(データベース簡単運用の場合)
C1、C2、C3を列名リストに指定したインデックスです。データベース簡単運用の場合は、以下のようなCREATE INDEX文で定義されたインデックスを意味します。マルチカラムインデックスと呼ぶこともあります。
CREATE INDEX SCM1.TBL1.IX1 KEY(C1,C2,C3)
1.探索条件の列挙
アプリケーションで検索、更新する際の探索条件をすべて列挙します。
2.インデックスの定義
アプリケーションでのデータベースの検索、更新処理において、WHERE探索条件に指定する検索や更新のキーとなる列と、表の結合条件となる列にはインデックスを定義します。
ブール演算子“OR”で条件を指定している場合は、“OR”で指定した各々の条件ごとにインデックスの定義を検討します。
この場合、TIDユニオンマージのアクセスモデルが動作します。(C1,C2)のマルチカラムインデックス(複数の列から構成されるインデックス)を定義しても、インデックスは利用されないので、C1とC2は別々のインデックスとして定義してください。
TIDユニオンマージについては、“TIDユニオンマージ”を参照してください。
注意
NOTと他の述語を一緒に使用した場合や、述語中に算術演算を指定した場合は、その列を先頭に持つインデックスを定義していても、インデックスは利用しません。
単独で条件として指定される列でも、たとえば性別のように、異なるキー値数が極端に少ないものにはインデックスを定義しないようにしてください。
3.定義順序の決定
マルチカラムインデックスを定義する時は、列の定義順序を決定します。
表の結合関係が複数列である場合は、関係のある列の順序でインデックスを定義します。
列の組合わせで条件を指定する場合と、単独の列で条件を指定する必要がある場合は、単独で指定する列を優先的に先頭に定義します。
検索を効率化するためのインデックス(表のレコードを絞り込むためのインデックス)は、比較述語“=”で条件を指定する列を優先的に先頭に定義します。
比較述語“=”で指定せず、BETWEEN述語などで条件を指定する場合は、実際の検索範囲が狭くなる列(検索開始位置、検索終了位置に同じ値を指定する列)を優先的に先頭に定義します。