ページの先頭行へ戻る
Symfoware Server V10.0.0/V10.0.1 RDB運用ガイド(データベース定義編)

2.8.3 インデックス定義

インデックスの定義は、CREATE INDEX文を使用して行います。インデックスを定義するためには、あらかじめ、定義するインデックスに対応する表のDSIを初期化しておくことが必要です。インデックス定義では、インデックスキーの構成列および表のデータを格納するデータベーススペースを指定します。インデックス定義により、インデックスのDSO定義およびインデックスのDSI定義が自動的に行われます。

インデックス名

インデックスにつける名前(インデックス名)を定義します。インデックス名は8文字以内の先頭が英字で始まる英数字、または8文字以内の日本語文字列で指定します。ただし、システム用の動作環境ファイルでDEFAULT_DSI_NAME=CODEを指定した場合、インデックス名は、36文字以内の先頭が英字で始まる英数字、または18文字以内の日本語文字列を指定できます。

インデックス定義の削除を行う場合には、削除対象とするインデックス定義をインデックス名で指定します。

キー指定

インデックスキーとする列を列名で指定します。複数の列を組み合わせて1つのインデックスとすることもできます。

格納領域指定

インデックスを格納する、データベーススペースのデータベーススペース名を“ON”のうしろに指定します。

在庫管理データベースの製品番号列と、製品名列の組合せをキーとするインデックスの格納構造を定義する例を以下に示します。インデックス名は“IDX1”とします。

また、インデックスはデータベーススペースDBSPACE1に格納するものとします。

在庫表を定義するCREATE INDEX文

CREATE INDEX  STOCKS.在庫表.IDX1              KEY (製品番号, 製品名)
                ↑     ↑    ↑                          ↑
          スキーマ名  表名  インデックス名              列名
                                                         ↑
                                                      キー指定

                COMMENT '在庫表のインデックス KEY : 製品番号,製品名'
                                           ↑
                                       注釈定義

                ON  DBSPACE1      ← 格納領域指定
                       ↑
             データベーススペース名

備考. KEY(製品番号, 製品名)は、キー指定です。

なお、上記の指定は、以下の定義をしたのと同じ意味です。

CREATE DSO @STOCKS#IDX1
       INDEX ON STOCKS.在庫表(製品番号, 製品名)
       TYPE BTREE(PAGESIZE1(8),PAGESIZE2(8), REALIGNMENT)  BY ADDRESS;
CREATE DSI @STOCKS#IDX1 INDEX  DSO @STOCKS#IDX1
       OPTION (DEGENERATE)
       ALLOCATE BASE  ON DBSPACE1 SIZE 30720K,
                INDEX ON DBSPACE1 SIZE 10240K;

インデックスのDSO名およびDSI

インデックスのDSO名およびDSI名は、インデックス定義時のスキーマ名とインデックス名を組み合わせて命名します。DSO名とDSI名は同じ名前になります。

 スキーマ名 {#|@} インデックス名 ”
   (1)    (2)       (3)        (4)

(1) 固定プレフィックス
(2) CREATE INDEX文で指定したスキーマ名
(3) #: インデックス名が文字列の場合
    @: インデックス名が各国語文字列の場合
(4) CREATE INDEX文で指定したインデックス名

ただし、スキーマ名、インデックス名のいずれか、または両方が各国語文字列の場合には、DSO名およびDSI名は、全体が各国語文字列となります。

システム用の動作環境ファイルでDEFAULT_DSI_NAME=CODEを指定した場合、インデックスのDSO名およびDSI名は、システムで採番する10桁の数字を使用して命名します。

以下に例を示します。

1

スキーマ名およびインデックス名が文字列の場合

CREATE INDEX STOCKS.在庫表.IDX1 KEY ( …… ) ON DBSPACE1

→  DSO名 : @STOCKS#IDX1
    DSI名 : @STOCKS#IDX1
2

スキーマ名は文字列、インデックス名が各国語文字列の場合

CREATE INDEX STOCKS.在庫表.部品番号IX KEY ( …… ) ON DBSPACE1

→  DSO名 : @STOCKS@部品番号IX
    DSI名 : @STOCKS@部品番号IX
3

システム用の動作環境ファイルでDEFAULT_DSI_NAME=CODEを指定した場合

CREATE INDEX STOCKS.在庫表.IND1MASTER KEY ( …… ) ON DBSPACE1

→  DSO名 : @0000000017
    DSI名 : @0000000017

インデックスの格納構造

インデックスの格納構造は以下のようになります。

格納構造:

BTREE構造

データ部のページ長:

8K

インデックス部のページ長:

8K

データ部の割付け量:

30720K
割付け対象のデータベーススペースに、割付け量分の連続領域が存在しない場合、複数の領域に分割して割付けることがあります。複数の領域に分割されたかどうかは、rdbprtコマンドの出力結果で確認できます。DSI情報のAllocation informationのAllocate sizeに、指定した割付け量以下の値が表示された場合、複数の領域に分割して割付けられたと判断できます。

縮退指定:

あり

インデックス部の割付け量:

10240K
割付け対象のデータベーススペースに、割付け量分の連続領域が存在しない場合、複数の領域に分割して割付けることがあります。複数の領域に分割されたかどうかは、rdbprtコマンドの出力結果で確認できます。DSI情報のAllocation informationのAllocate sizeに、指定した割付け量以下の値が表示された場合、複数の領域に分割して割付けられたと判断できます。

参照

rdbprtコマンドの詳細については、“コマンドリファレンス”を参照してください。

インデックスの注釈定義

格納構造定義を簡略化してインデックスを定義する場合、インデックスに対して、文字列または各国語文字列で注釈を指定することができます。最大256バイトの文字列を指定することができます。文字列と各国語文字列の両方を注釈として指定することもできます。注釈が不要な場合は、指定を省略します。以下に例を示します。

格納構造を簡略化したインデックスに注釈を付与

CREATE INDEX  STOCKS.在庫表.IDX1  KEY (製品番号, 製品名)

              COMMENT '在庫表のインデックス KEY : 製品番号,製品名'
                                      ↑
                                   注釈定義

              ON  DBSPACE1