Hitachi

ノンストップデータベース HiRDB Version 10 解説


3.4.2 インデクスの横分割

表を横分割した場合,横分割した表に対応させてインデクスも複数のユーザ用RDエリアにわたって横分割することをインデクスの横分割といいます。また,横分割したインデクスを横分割インデクスといいます。インデクスを横分割すると,インデクスの一括作成又は再作成をするときに,ユーザ用RDエリア又はユーザLOB用RDエリアごとに独立した運用ができます。インデクスの横分割を次の図に示します。

図3‒25 インデクスの横分割

[図データ]

〔説明〕

横分割インデクスをどのRDエリアに格納するかは,定義系SQLのCREATE INDEXで指定します。

〈この項の構成〉

(1) インデクスの横分割の例(HiRDB/シングルサーバの場合)

表を横分割した場合,定義するインデクスが分割キーインデクスか,非分割キーインデクスかを意識する必要があります。分割キーインデクス及び非分割キーインデクスについては,「分割キーインデクスと非分割キーインデクス」を参照してください。インデクスの種類によるインデクスの横分割指針を次の表に示します。

表3‒7 インデクスの横分割指針(HiRDB/シングルサーバの場合)

インデクスの種類

分割指針

分割キーインデクスの場合

横分割した表に対応させてインデクスも横分割してください。

非分割キーインデクスの場合

インデクスを横分割しないことをお勧めします。インデクスを横分割すると,インデクスを使用した検索性能が悪くなることがあります。

ただし,表のデータが非常に多い場合は,インデクスの横分割を検討してください。インデクスを横分割すると,表格納RDエリアとインデクス格納RDエリアが1対1で管理できるため,ユティリティの操作性が向上します。例えば,インデクスを横分割しない場合にRDエリア単位のデータロード,又はRDエリア単位の再編成をしたときは,データロード又は再編成後にインデクスを一括作成する必要があります。インデクスを横分割すれば,RDエリア単位のデータロード,又はRDエリア単位の再編成後にインデクスを一括作成する必要はありません。

インデクスの横分割の例(HiRDB/シングルサーバの場合)を次の図に示します。

図3‒26 インデクスの横分割の例(HiRDB/シングルサーバの場合)

[図データ]

〔説明〕
  • ディスクのアクセス競合を避けるために,分割した表及びインデクスを格納するRDエリアを異なるディスク上に配置してください。

  • 分割キーインデクスは横分割してください。

  • 性能を重視する場合は,非分割キーインデクスを横分割しないでください。

  • 操作性を重視する場合は,非分割キーインデクスを横分割してください。

(2) インデクスの横分割の例(HiRDB/パラレルサーバの場合)

HiRDB/パラレルサーバの場合,表をサーバ内横分割するか,又はサーバ間横分割するかによってインデクスの横分割指針が変わります。

(a) 表をサーバ内横分割する場合

定義するインデクスが分割キーインデクスか,非分割キーインデクスかを意識する必要があります。分割キーインデクス及び非分割キーインデクスについては,「分割キーインデクスと非分割キーインデクス」を参照してください。インデクスの種類によるインデクスの横分割指針を次の表に示します。

表3‒8 インデクスの横分割指針(HiRDB/パラレルサーバの場合)

インデクスの種類

分割指針

分割キーインデクスの場合

横分割した表に対応させてインデクスも横分割してください。

非分割キーインデクスの場合

インデクスを横分割しないことをお勧めします。インデクスを横分割すると,インデクスを使用した検索性能が悪くなることがあります。

ただし,表のデータが非常に多い場合は,インデクスの横分割を検討してください。インデクスを横分割すると,表格納RDエリアとインデクス格納RDエリアが1対1で管理できるため,ユティリティの操作性が向上します。例えば,インデクスを横分割しない場合にRDエリア単位のデータロード,又はRDエリア単位の再編成をしたときは,データロード又は再編成後にインデクスを一括作成する必要があります。インデクスを横分割すれば,RDエリア単位のデータロード,又はRDエリア単位の再編成後にインデクスを一括作成する必要はありません。

インデクスの横分割の例(サーバ内横分割の場合)を次の図に示します。

図3‒27 インデクスの横分割の例(サーバ内横分割の場合)

[図データ]

〔説明〕
  • ディスクのアクセス競合を避けるために,分割した表及びインデクスを格納するRDエリアを異なるディスク上に配置してください。

  • 分割キーインデクスは横分割してください。

  • 性能を重視する場合は,非分割キーインデクスを横分割しないでください。

  • 操作性を重視する場合は,非分割キーインデクスを横分割してください。

(b) 表をサーバ間横分割する場合

横分割した表に対応させてインデクスも横分割してください。定義するインデクスが分割キーインデクスか,非分割キーインデクスかを意識する必要はありません。インデクスの横分割の例(サーバ間横分割の場合)を次の図に示します。

図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列)を指定しているが,分割キーの指定順序が表定義時と異なるため,この複数列インデクスは非分割キーインデクスになります。