5.5.4 レンジインデクスを定義する場合の注意点(レンジインデクスの未完状態)
レンジインデクスを定義する場合,B-treeインデクスを定義するときと同様に,実表を作成後,データを格納する前にCREATE INDEX文で定義してください。
行を格納するセグメントが割り当てられている状態の実表に対してレンジインデクスを定義した場合,定義されたレンジインデクスは未完状態になります。未完状態になると,定義したレンジインデクスは無効な状態となり,使用できなくなります。
未完状態を解除するには,レンジインデクスを再作成する必要があります。そのため,実表にデータを格納する前に,レンジインデクスをどの列に定義するかを事前によく検討してください。
未完状態のレンジインデクスに対して,次に示す操作を行うとエラーになります。
- ■エラーになる操作
-
-
未完状態のレンジインデクスを使用するSELECT文の実行
-
未完状態のレンジインデクスが定義された表に対するINSERT文,およびUPDATE文の実行
-
未完状態のレンジインデクスが定義された実表に対する-dオプションを指定しないadbimportコマンドの実行
-
未完状態のレンジインデクスが定義された実表に対するadbmergechunkコマンドの実行
-
未完状態のレンジインデクスが定義されたアーカイブマルチチャンク表に対するadbunarchivechunkコマンドの実行
-
レンジインデクスの未完状態の解除方法については,「16.11.1 レンジインデクスが未完状態になったときの対処方法」を参照してください。
- メモ
-
次に示すときなどは,行を格納するセグメントが割り当てられていない状態です。このときに,CREATE INDEX文を実行すると,レンジインデクスは正常に作成されます。
-
実表の定義直後
-
TRUNCATE TABLE文の実行直後
例えば,DELETE文で表の全行を削除しても,行を格納するセグメントは割り当てられている状態のままです。そのため,DELETE文で表の全行を削除したあとにCREATE INDEX文を実行した場合,そのレンジインデクスは未完状態になります。
-