14.2.1 インデクスの作成
(1) インデクスの効果
- 性能の向上
- 表を検索するときのキーとなる列にインデクスを作成しておくと,表の検索性能が向上します。
(2) 適用基準
インデクスを作成するとよい列を次に示します。
- データを絞り込むための条件に使用する列
- 表の結合処理の条件として使用する列
- データのソート又はグループ分けの条件として使用する列
- 参照制約を定義した構成列(外部キー)
なお,次に示す列にインデクスを作成すると検索性能が低下するため,インデクスを作成しないようにします。
(3) 作成方法
表にインデクスを作成するには,定義系SQLのCREATE INDEXを実行します。
(4) 共通規則
- 一つの表に最大255個のインデクスを定義できます。
- ナル値を含む列又は行のない列に対してもインデクスを定義できます。
- ビュー表にはインデクスを作成できません。
- コストベースの最適化をする場合,最適化の精度を更に向上させるため,必要に応じて最適化情報収集ユティリティ(pdgetcstコマンド)で最適化情報を収集します。最適化情報収集ユティリティの実行要否については,マニュアル「HiRDB Version 8 コマンドリファレンス」の「最適化情報収集レベル」を参照してください。
(5) インデクスを定義できないデータ型
次に示すデータ型の列にはインデクスを定義できません。
- 精度が20けた以上のDECIMAL
- BLOB
- BINARY
- BOOLEAN
- 抽象データ型
(6) インデクスのキー長の上限
インデクスのキー長は,次に示す条件を満たす必要があります。この条件を満たさないとインデクスを定義できません。
- インデクスのキー長(バイト)
- ≦MIN{(インデクス格納RDエリアのページサイズ÷2)-1242,4036}
|
インデクス格納RDエリアのページサイズが4096バイトの場合は,キー長が最大806バイトのインデクスが定義できます。インデクスのキー長については,「表17-5 インデクスのキー長一覧」を参照してください。
なお,複数列インデクスの場合は,複数列インデクスを構成する各列のキー長の合計がインデクスのキー長となります。
(7) 注意事項
一つの表に同じインデクスを二つ以上作成できません。異なるインデクス名であっても同じインデクスと扱われる場合の例を次に示します。
- ●単一列インデクスの場合
CREATE INDEX インデクス1 ON 表1 (列1 ASC)
CREATE INDEX インデクス2 ON 表1 (列1 DESC) |
- この場合,インデクス2はインデクス1と同じインデクスとして扱われます。このため,先に定義したインデクス1が有効になります。
- ●複数列インデクスの場合
CREATE INDEX インデクス1 ON 表1 (列1 ASC,列2 ASC)
CREATE INDEX インデクス2 ON 表1 (列1 DESC,列2 DESC) |
- 又は
CREATE INDEX インデクス1 ON 表1 (列1 ASC,列2 DESC)
CREATE INDEX インデクス2 ON 表1 (列1 DESC,列2 ASC) |
- この場合,インデクス1とインデクス2は同じインデクスとして扱われます。このため,先に定義したインデクス1が有効になります。なお,次に示す場合は,互いに異なるインデクスになります。
CREATE INDEX インデクス1 ON 表1 (列1 DESC,列2 DESC)
CREATE INDEX インデクス2 ON 表1 (列1 ASC,列2 DESC) |