スケーラブルデータベースサーバ HiRDB Version 8 システム運用ガイド(UNIX(R)用)

[目次][索引][前へ][次へ]

14.2 データを格納している表にインデクスを定義する方法

実行者 表の所有者

データを格納している表に対する処理を変更する場合や,この表に対する検索性能の向上を目的とする場合などは,表にインデクスを追加できます。

注意
抽象データ型(プラグインが提供する抽象データ型を除く)の列にインデクス(B-treeインデクス)は定義できません。
<この節の構成>
(1) 追加方法
(2) インデクスの作成時間を短縮する方法(EMPTYオプション)

(1) 追加方法

データを格納している表にインデクスを定義する手順を次に示します。

〈手順〉
  1. CREATE INDEXでインデクスを定義します。インデクスを定義するとき,インデクスを定義する表をアクセスするUAPは排他待ちの状態になります。
  2. インデクスを定義した後に,必要があれば最適化情報収集ユティリティ(pdgetcstコマンド)を実行してください。ただし,プラグインインデクスは,最適化情報収集ユティリティの対象外となります。最適化情報収集ユティリティの実行要否については,マニュアル「HiRDB Version 8 コマンドリファレンス」を参照してください。
  3. インデクスを定義すると,インデクスを定義した表を使用しているストアドルーチンのインデクス情報が無効になります。この場合,ALTER PROCEDURE又はALTER ROUTINEでストアドルーチンを再作成してください。
    また,トリガSQL文中に指定している表にインデクスを定義すると,トリガのインデクス情報が無効になります。この場合,ALTER TRIGGER又はALTER ROUTINEでトリガを再作成してください。

(2) インデクスの作成時間を短縮する方法(EMPTYオプション

データが大量にある表に対してインデクスを定義する場合,インデクスの実体の作成(CREATE INDEXの実行)に時間が掛かります。その間,ほかの定義系SQLは実行できません。

CREATE INDEXにEMPTYオプションを指定すると,インデクスの実体を作成しないで,定義上のインデクスを作成します。これを未完状態のインデクスと呼びます。インデクスの実体を作成しないため,CREATE INDEXの実行は即時終了し,ほかの定義系SQLを実行できるようになります。

なお,プラグインインデクスに対してもEMPTYオプションを指定できます。

参考
  1. インデクスの実体が未作成であるため,未完状態のインデクスを使った検索や,未完状態のインデクスを定義している表の列の更新はできません(SQLエラーとなります)。
  2. インデクスが未完状態であるかどうかは,データベース状態解析ユティリティ(pddbstコマンド)で確認できます。インデクス単位の状態解析,又はRDエリア単位の状態解析(論理的解析)では,statusに状態を表示し,クラスタキー及びクラスタリングデータページの格納状態解析では,警告メッセージで未完状態であることを通知します。
  3. インデクスの実体は,データベース再編成ユティリティ(pdrorgコマンド)のインデクス再作成機能(-k ixrc)を使用して作成します。インデクスの実体を作成すると,実体を作成したインデクスの未完状態は解除されます。また,PURGE TABLE文で表を全件削除した場合,その表のすベてのインデクスの未完状態が解除されます。
  4. 分割表の場合は,インデクスも複数のRDエリアに分割格納しますが,未完状態は,個々の分割格納されたインデクスごとに管理します。データベース再編成ユティリティ(pdrorgコマンド)では,このインデクスを格納するRDエリア単位にインデクスの実体を作成できます。このため,分割格納したインデクスの一部を作成した時点では,インデクスの一部は作成済みで一部は未完状態となるため,SQLに指定した条件などによって,実行できたりエラーになったりする場合があります。