3.4 インデクス
3.4.2 インデクスの横分割
表を横分割した場合,横分割した表に対応させてインデクスも複数のユーザ用 RD エリアにわたって横分割 することをインデクスの横分割といいます。また,横分割したインデクスを横分割インデクスといいます。
インデクスを横分割すると,インデクスの一括作成又は再作成をするときに,ユーザ用 RD エリア又はユー ザ LOB 用 RD エリアごとに独立した運用ができます。インデクスの横分割を次の図に示します。
図 3‒25 インデクスの横分割
〔説明〕
横分割インデクスをどの RD エリアに格納するかは,定義系 SQL のCREATE INDEXで指定します。
(1) インデクスの横分割の例(HiRDB/シングルサーバの場合)
表を横分割した場合,定義するインデクスが分割キーインデクスか,非分割キーインデクスかを意識する必 要があります。分割キーインデクス及び非分割キーインデクスについては,「(3)分割キーインデクスと非分 割キーインデクス」を参照してください。インデクスの種類によるインデクスの横分割指針を次の表に示し ます。
表 3‒7 インデクスの横分割指針(HiRDB/シングルサーバの場合)
インデクスの種類 分割指針
分割キーインデクスの場合 横分割した表に対応させてインデクスも横分割してください。
非分割キーインデクスの場 合
インデクスを横分割しないことをお勧めします。インデクスを横分割すると,インデクスを使 用した検索性能が悪くなることがあります。
ただし,表のデータが非常に多い場合は,インデクスの横分割を検討してください。インデク スを横分割すると,表格納 RD エリアとインデクス格納 RD エリアが 1 対 1 で管理できるた め,ユティリティの操作性が向上します。例えば,インデクスを横分割しない場合に RD エリ
3 データベースの論理構造
87
インデクスの種類 分割指針
ア単位のデータロード,又は RD エリア単位の再編成をしたときは,データロード又は再編成 後にインデクスを一括作成する必要があります。インデクスを横分割すれば,RD エリア単位 のデータロード,又は RD エリア単位の再編成後にインデクスを一括作成する必要はありませ ん。
インデクスの横分割の例(HiRDB/シングルサーバの場合)を次の図に示します。
図 3‒26 インデクスの横分割の例(HiRDB/シングルサーバの場合)
〔説明〕
• ディスクのアクセス競合を避けるために,分割した表及びインデクスを格納する RD エリアを異な るディスク上に配置してください。
• 分割キーインデクスは横分割してください。
• 性能を重視する場合は,非分割キーインデクスを横分割しないでください。
• 操作性を重視する場合は,非分割キーインデクスを横分割してください。
(2) インデクスの横分割の例(HiRDB/パラレルサーバの場合)
HiRDB/パラレルサーバの場合,表をサーバ内横分割するか,又はサーバ間横分割するかによってインデク スの横分割指針が変わります。
(a) 表をサーバ内横分割する場合
定義するインデクスが分割キーインデクスか,非分割キーインデクスかを意識する必要があります。分割 キーインデクス及び非分割キーインデクスについては,「(3)分割キーインデクスと非分割キーインデクス」
を参照してください。インデクスの種類によるインデクスの横分割指針を次の表に示します。
表 3‒8 インデクスの横分割指針(HiRDB/パラレルサーバの場合)
インデクスの種類 分割指針
分割キーインデクスの場合 横分割した表に対応させてインデクスも横分割してください。
非分割キーインデクスの場 合
インデクスを横分割しないことをお勧めします。インデクスを横分割すると,インデクスを使 用した検索性能が悪くなることがあります。
ただし,表のデータが非常に多い場合は,インデクスの横分割を検討してください。インデク
インデクスの種類 分割指針
ア単位のデータロード,又は RD エリア単位の再編成をしたときは,データロード又は再編成 後にインデクスを一括作成する必要があります。インデクスを横分割すれば,RD エリア単位 のデータロード,又は RD エリア単位の再編成後にインデクスを一括作成する必要はありませ ん。
インデクスの横分割の例(サーバ内横分割の場合)を次の図に示します。
図 3‒27 インデクスの横分割の例(サーバ内横分割の場合)
〔説明〕
• ディスクのアクセス競合を避けるために,分割した表及びインデクスを格納する RD エリアを異な るディスク上に配置してください。
• 分割キーインデクスは横分割してください。
• 性能を重視する場合は,非分割キーインデクスを横分割しないでください。
• 操作性を重視する場合は,非分割キーインデクスを横分割してください。
(b) 表をサーバ間横分割する場合
横分割した表に対応させてインデクスも横分割してください。定義するインデクスが分割キーインデクス か,非分割キーインデクスかを意識する必要はありません。インデクスの横分割の例(サーバ間横分割の場 合)を次の図に示します。
3 データベースの論理構造
89
図 3‒28 インデクスの横分割の例(サーバ間横分割の場合)
〔説明〕
• ディスクのアクセス競合を避けるために,分割した表及びインデクスを格納する RD エリアを異な るディスク上に配置してください。
• 分割キーインデクス及び非分割キーインデクスを横分割してください。
(3) 分割キーインデクスと非分割キーインデクス
インデクスがある一定の条件を満たすと,そのインデクスは分割キーインデクスになります。条件を満たさ ないインデクスは非分割キーインデクスになります。ここでは,その条件について説明します。この条件 は,表が単一列分割か複数列分割かによって異なります。表の分割条件に一つの列だけを使用している場合 を単一列分割といい,表の分割条件に複数の列を使用している場合を複数列分割といいます。
(a) 単一列分割の場合
次に示すどちらかの条件を満たす場合,そのインデクスは分割キーインデクスになります。
〈条件〉
• 表を横分割するときに格納条件を指定した列(分割キー)に定義した単一列インデクス
• 表を横分割するときに格納条件を指定した列(分割キー)を第 1 構成列とした複数列インデクス ZAIKO 表を例にして,インデクスが分割キーインデクスになる場合を次の図に示します。
図 3‒29 分割キーインデクスになる場合(単一列分割の場合)
〔説明〕
CREATE INDEX A12 ON ZAIKO (SCODE ASC) 1 CREATE INDEX A12 ON ZAIKO (SCODE ASC,TANKA DESC) 2 CREATE INDEX A12 ON ZAIKO (TANKA DESC,SCODE ASC) 3
1. 分割キーである SCODE 列をインデクスとした場合,そのインデクスは分割キーインデクスになり ます。そのほかの列をインデクスとした場合,そのインデクスは非分割キーインデクスになります。
2. 分割キーである SCODE 列を複数列インデクスの第 1 構成列にすると,その複数列インデクスは分 割キーインデクスになります。
3. 分割キーである SCODE 列を第 1 構成列以外に指定すると,その複数列インデクスは非分割キーイ ンデクスになります。
(b) 複数列分割の場合
次に示す条件を満たす場合,そのインデクスは分割キーインデクスになります。
〈条件〉
• 分割キーを先頭とし,分割に指定した列を先頭から同順にすべて含んで,複数の列に作成したイン デクスです。
ZAIKO 表を例にして,インデクスが分割キーインデクスになる場合を次の図に示します。
図 3‒30 分割キーインデクスになる場合(複数列分割の場合)
〔説明〕
CREATE INDEX A12 ON ZAIKO (SCODE ASC,TANKA DESC) 1 CREATE INDEX A12 ON ZAIKO (SCODE ASC,TANKA DESC,ZSURYO ASC) 2 CREATE INDEX A12 ON ZAIKO (TANKA DESC,SCODE ASC) 3 CREATE INDEX A12 ON ZAIKO (SCODE ASC,ZSURYO DESC,TANKA ASC) 4
1. すべての分割キー(SCODE 及び TANKA 列)を指定し,かつ分割キーの指定順序が表定義時と同 じため,この複数列インデクスは分割キーインデクスになります。
2. すべての分割キー(SCODE 及び TANKA 列)を指定し,かつ分割キーの指定順序が表定義時と同 じため,この複数列インデクスは分割キーインデクスになります。
3. すべての分割キー(SCODE 及び TANKA 列)を指定しているが,分割キーの指定順序が表定義時 と異なるため,この複数列インデクスは非分割キーインデクスになります。
4. すべての分割キー(SCODE 及び TANKA 列)を指定しているが,分割キーの指定順序が表定義時 と異なるため,この複数列インデクスは非分割キーインデクスになります。
3 データベースの論理構造
91