3.12.1 CREATE INDEX形式2の形式と規則
(1) 機能
インデクス型を指定したインデクスを定義します。
(2) 使用権限
- 表の所有者
-
公用RDエリアに自分が所有する表のインデクスを定義できます。
- 私用RDエリアの利用権限を持つ表の所有者
-
利用権限を持つ私用RDエリアに自分が所有する表のインデクスを定義できます。
(3) 形式2<インデクス型を指定したインデクスの定義>
CREATE INDEX 〔認可識別子.〕インデクス識別子 USING TYPE 〔認可識別子.〕インデクス型識別子 ON 〔認可識別子.〕表識別子(列名) IN{RDエリア名 |(RDエリア名) |((RDエリア名)〔,(RDエリア名)〕…) |マトリクス分割インデクス格納用RDエリア指定}〕 〔インデクスオプション〕 〔PLUGIN プラグインオプション〕 マトリクス分割インデクス格納用RDエリア指定::=2次元格納用RDエリア指定 2次元格納用RDエリア指定::= (マトリクス分割用RDエリアリスト〔,マトリクス分割用RDエリアリスト〕…) マトリクス分割用RDエリアリスト::=(RDエリア名〔,RDエリア名〕…) インデクスオプション::=EMPTY
(4) オペランド
(a) 〔認可識別子.〕インデクス識別子
認可識別子には,作成するインデクスを所有するユーザの認可識別子を指定します。
インデクス識別子には,定義するインデクスの名称を指定します。
表所有者が定義した自分の所有するインデクス内に同じ名称は指定できません。
(b) USING TYPE 〔認可識別子.〕インデクス型識別子
- 認可識別子
-
インデクス型の所有者の認可識別子を指定します。
認可識別子を省略した場合,省略時に仮定される認可識別子に同一名称のインデクス型がないときは,認可識別子'MASTER'に同一名称のインデクス型があれば,そのインデクス型を指定したものとします。
- インデクス型識別子
-
インデクス型を指定します。インデクス型識別子については,各種プラグインマニュアルを参照してください。
(c) 〔認可識別子.〕表識別子(列名)
- 認可識別子
-
認可識別子には,表を所有するユーザの認可識別子を指定します。
- 表識別子
-
表識別子には,インデクスを作成する実表の名称を指定します。
FIX表は指定できません。
- 列名
-
インデクスを定義する列の名称を指定します。列のデータ型は,抽象データ型だけです。
(d) IN
{RDエリア名 |(RDエリア名) |((RDエリア名)〔,(RDエリア名)〕…) |マトリクス分割インデクス格納用RDエリア指定}
マトリクス分割インデクス格納用RDエリア指定::=2次元格納用RDエリア指定
2次元格納用RDエリア指定::=(マトリクス分割用RDエリアリスト〔,マトリクス分割用RDエリアリスト〕…)
- マトリクス分割用RDエリアリスト::=(RDエリア名〔,RDエリア名〕…)
-
インデクスを格納するRDエリアの名称を指定します。
マトリクス分割表にインデクスを定義する場合,マトリクス分割インデクス格納用RDエリア指定を指定してください。
インデクスを格納するRDエリアについての規則を次に示します。
-
RDエリア名はユーザLOB用RDエリアでなければなりません。
-
RDエリアは,あらかじめデータベース初期設定ユティリティで作成,又はデータベース構成変更ユティリティで追加されていなければなりません。
-
指定するRDエリア名は,表格納用RDエリアと同じサーバに定義しているユーザLOB用RDエリアを指定してください。
-
RDエリア名を複数個指定する場合,同じRDエリア名は指定できません。ただし,境界値指定の横分割表,ハッシュ分割表,又はマトリクス分割表で,表格納用RDエリア名が重複している場合は指定できます。
-
表が複数のRDエリアに分割して格納されている場合,インデクス格納用RDエリアの指定は,次に示すとおりです。
・RDエリア名は,表を格納しているRDエリアと同じ数だけ指定します。このとき,インデクスの格納先はCREATE TABLEで指定した表格納用RDエリアの指定順に対応します。
・境界値指定の横分割表,ハッシュ分割表,又はマトリクス分割表で,表格納用RDエリア名が重複している場合は,それに対応するようにインデクス格納用RDエリア名を指定します。
-
(e) EMPTY
未完状態のプラグインインデクスを作成する場合に指定します。
EMPTYを指定すると,プラグインインデクスを定義するときの同時実行性が向上します。また,表の格納データが多く,複数のインデクスの定義を同時に実行する場合に効果があります。表にデータが格納されていない場合は効果がありません。
EMPTYオプションの使用方法については,マニュアル「HiRDB システム運用ガイド」を参照してください。
(f) PLUGIN プラグインオプション
プラグインインデクスに対するパラメタ情報を文字列定数(最大255バイト)で指定します。パラメタ情報には,16進文字列定数は指定できません。
パラメタ情報については,各種プラグインマニュアルを参照してください。
(5) 共通規則
-
インデクスは,一つの表に最大255個定義できます。
-
インデクスは,ナル値を含む列,又は行のない列に対しても定義できます。
-
インデクスを格納するRDエリアに,インナレプリカ機能を適用しているRDエリアと適用していないRDエリアは混在して指定できません。インナレプリカ機能を適用しているRDエリアを指定する場合,RDエリア名にはオリジナルRDエリア名を指定します。
-
インナレプリカ機能を使用している場合のCREATE INDEXの実行条件については,マニュアル「インナレプリカ機能 HiRDB Staticizer Option」を参照してください。
-
一つのRDエリアに格納できるインデクスは,最大500個です。
(6) 留意事項
-
インデクスが付いている列の値をユーザが更新すると,インデクスも更新されます。
-
CREATE INDEXは,OLTP下のX/Openに従ったUAPから指定できません。
-
EMPTYを指定してプラグインインデクスを定義した場合,データベース再編成ユティリティでプラグインインデクスを再作成する必要があります。インデクスの再作成については,マニュアル「HiRDB コマンドリファレンス」を参照してください。
-
大量のデータが登録されている表に対してCREATE INDEX文でインデクスを作成する場合,処理時間が長くなるおそれがあります。CREATE INDEX文を実行する前に,タイマ監視に関する指定を次のように設定してください。
-
クライアント環境定義PDCWAITTIME
実績やデータ量からCREATE INDEXの実行時間を推測できる場合は,0以外の余裕を持たせた値を指定してください。
実行時間を推測できない場合は,0又は指定を省略してください。
-
-
HiRDB/パラレルサーバでサーバ間横分割した表にインデクスを定義する場合で,表格納用RDエリア,又は指定したインデクス格納用RDエリアが閉塞状態のときは,RDエリアの排他待ちとなります。このとき,排他待ちの時間がシステム定義pd_lck_wait_timeoutオペランドの指定値に達してタイムアウトしても,すぐにエラーリターンされないことがあります。これを避けるため,CREATE INDEX文を実行する前に,表格納用RDエリア,又は指定したインデクス格納用RDエリアの閉塞状態を解除してください。