2.3.3 レンジインデクス
レンジインデクスは,レンジインデクスを定義した実表に格納されているデータのうち,次に示す2つの値域(列の値の最小値と最大値)を管理しています。
-
チャンク内に格納されているデータの値域
-
セグメント内に格納されているデータの値域
レンジインデクスが管理する値域の概要について次の図に示します。
レンジインデクスを使用すると,探索条件を満たさない値域のデータを格納しているチャンクの検索処理がスキップされます(チャンクのスキップができます)。
また,チャンクのスキップ後に,探索条件を満たす値域のデータを格納しているチャンク内で,探索条件を満たさない値域のデータを格納しているセグメントの検索処理がスキップされます(セグメントのスキップができます)。
不要なチャンクおよびセグメントの検索処理をスキップすることで,その分検索性能が向上します。
-
チャンクのスキップ
探索条件を満たさない値域のデータを格納しているチャンクの検索処理をスキップすることです。
チャンクの概要については,「2.14.2 データインポート単位のデータ管理(チャンク)」を参照してください。チャンクのスキップの詳細については,「2.14.3 チャンクとレンジインデクスの関係」を参照してください。
-
セグメントのスキップ
探索条件を満たさない値域のデータを格納しているセグメントの検索処理をスキップすることです。
セグメントの概要については,「2.4.3 DBエリアの構造(セグメントとページ)」の「(1) セグメント」を参照してください。セグメントのスキップの詳細については,次に示します。
- メモ
-
■レンジインデクスと非順序実行方式の関係
非順序実行方式が適用されるSQL文の場合,検索処理の開始時点(カーソルオープン時点)で,レンジインデクスが管理しているチャンク内に格納されているデータの値域を読み込みます。そして,メモリに保存します。検索処理の実行中には,メモリに保存した情報に従って,チャンクのスキップを行うかどうかを判定します。
なお,次の条件をすべて満たすレンジインデクスが対象になります。
-
B-treeインデクスを使用する検索の対象表に定義されているレンジインデクスである
-
チャンクのスキップで使用されるレンジインデクスである
-
(1) レンジインデクスの概要
ここでは,セグメントのスキップを例に,レンジインデクスの概要を次の図に示します。
(2) レンジインデクスの特徴
レンジインデクスは,主に次に示す4つの特徴を持っています。チャンクのスキップができるレンジインデクスの特徴については,「2.14.3 チャンクとレンジインデクスの関係」の「(2) レンジインデクスの特徴(チャンクのスキップ)」を参照してください。
(a) B-treeインデクスやテキストインデクスとレンジインデクスを合わせて使用できる
レンジインデクスを使用してチャンクのスキップを行ったあとで,B-treeインデクスやテキストインデクスを使用できます。B-treeインデクスやテキストインデクスとレンジインデクスを使用した検索については,「2.14.3 チャンクとレンジインデクスの関係」の「(2) レンジインデクスの特徴(チャンクのスキップ)」の「(a) B-treeインデクスやテキストインデクスとレンジインデクスを合わせて使用できる」を参照してください。
- メモ
-
B-treeインデクスやテキストインデクスと合わせて使用する場合,レンジインデクスを使用した検索(セグメントのスキップ)は行われません。
(b) 複数のレンジインデクスを使用できる
複数のレンジインデクスを使用した検索の例を次の図に示します。
(c) B-treeインデクスやテキストインデクスよりデータ容量が少なくなる
B-treeインデクスの場合は,表の1行に対して1つのインデクスキーを作成します。また,テキストインデクスの場合は,表の1行に対して,そこに含まれる文字列ごとに番号を割り振って管理します。
一方,レンジインデクスの場合は,1セグメントに対して1つの値域を作成します。そのため,レンジインデクスは,B-treeインデクスやテキストインデクスよりデータ容量が少なくなります。
(d) セグメントに格納されているデータの値域の幅によって検索性能が変わる
レンジインデクスを使用した検索では,セグメント内に格納されているデータの値域の幅によって検索性能が変わります。例を次の図に示します。
- [説明]
-
データの格納例1の場合は,検索処理を実行するセグメント数が2つになります。一方,データの格納例2の場合は,値域の重複があり,各セグメントの値域が格納例1に比べて広くなっています。そのため,検索処理を実行するセグメント数が4つになります。このようにセグメントに格納されているデータの値域の幅によって,検索性能が変わります。値域を狭くすると,検索性能が向上します。
(3) レンジインデクスの値域の更新(セグメント)
行の追加,更新を繰り返すと,レンジインデクスの値域が広がり,レンジインデクスの効果が薄れていきます(値域が狭くなることはありません)。また,行の削除を繰り返すと,セグメント内に格納されているデータの値域に比べて,レンジインデクスの値域が広くなり,レンジインデクスの効果が薄れていきます。
レンジインデクスの効果が薄れてきた場合は,対象のレンジインデクスに対してインデクス再作成を実行し,レンジインデクスを作成し直してください。
レンジインデクスの値域が広がる条件を次の表に示します。
項番 |
実行した操作 |
レンジインデクスの値域が広がる条件 |
---|---|---|
1 |
行の追加 |
値域の範囲外の値を追加した場合に,追加行を格納するセグメントの値域が広がります。 |
2 |
行の更新 |
値域の範囲外の値に更新した場合に,更新行を格納するセグメントの値域が広がります。 |
3 |
行の削除 |
値域は広がりません。 |