2.14.3 チャンクとレンジインデクスの関係
ここでは,チャンクとレンジインデクスの関係について説明します。レンジインデクスの詳細については,「2.3.3 レンジインデクス」を参照してください。
レンジインデクスは,実表のセグメント内に格納されているデータの値域(列の値の最小値と最大値)だけでなく,チャンク内に格納されているデータの値域も管理しています。そのため,レンジインデクスを使用すると,探索条件を満たさない値域のデータを格納しているチャンクおよびセグメントの検索処理をスキップでき,その分検索性能が向上します。
レンジインデクスと,チャンクおよびセグメントの概要を次の図に示します。
- [説明]
-
表T1のC2列にレンジインデクスを定義します。表T1に対して,バックグラウンドインポートを実行すると,表にデータが格納されます。また,C2列のデータを基にレンジインデクスが作成されます。それらのデータの固まりは,1つのチャンクとして管理されます。
このとき,レンジインデクスは,セグメント内の表データの値域を管理するだけでなく,チャンク内の表データの値域も管理します。
(1) レンジインデクスを使用した検索処理(チャンクのスキップ)
レンジインデクスを使用して表を検索した場合,探索条件を満たさない値域のデータを格納しているチャンクおよびセグメントの検索処理を,次に示すように段階的にスキップできます。
- ■レンジインデクスを使用した検索処理
-
-
チャンクのスキップ
-
セグメントのスキップ
- 重要
-
バージョン02-02より前のバージョンで定義されたレンジインデクスの場合は,チャンクのスキップはできません。
-
それぞれの検索処理について,次に示します。
-
チャンクのスキップ
レンジインデクスを使用した表の検索では,まず,チャンク単位で検索処理をスキップできます。HADBは,探索条件を満たす値域のデータを格納しているチャンクかどうかを判定し,探索条件を満たさない値域のデータを格納しているチャンクであれば,そのチャンクを検索しません。
このとき,表のデータ,B-treeインデクスのデータおよびテキストインデクスのデータにはアクセスしないため,検索性能が向上します。
チャンクのスキップの概要を,次の図に示します。
図2‒49 チャンクのスキップの概要 -
セグメントのスキップ
探索条件とレンジインデクスの値域を比較した結果,チャンク3が条件を満たしている場合,次はチャンク3内の表のセグメントに対して検索処理を実行します。その際,「2.3.3 レンジインデクス」と同様に,探索条件を満たさない値域のデータを格納しているセグメントの検索処理をスキップできます。
セグメントのスキップの概要を,次の図に示します。
図2‒50 セグメントのスキップの概要
(2) レンジインデクスの特徴(チャンクのスキップ)
チャンクのスキップができるレンジインデクスと,「2.3.3 レンジインデクス」の「(2) レンジインデクスの特徴」で説明している4つの特徴との違いについて説明します。
(a) B-treeインデクスやテキストインデクスとレンジインデクスを合わせて使用できる
チャンクのスキップができるレンジインデクスは,B-treeインデクスやテキストインデクスと合わせて使用できます。
B-treeインデクスやテキストインデクスと合わせて使用したときの検索処理を,次に示します。
- ■チャンクのスキップができるレンジインデクスとB-treeインデクスを使用した検索処理
-
-
レンジインデクスを使用した検索(チャンクのスキップ)
まず,レンジインデクスを使用した検索処理が行われます。探索条件を満たす値域のデータを格納しているチャンクかどうかを判定し,探索条件を満たさない値域のデータを格納しているチャンクであれば,そのチャンクの検索をスキップします。チャンクのスキップによって,探索条件を満たすチャンクを絞り込みます。
-
B-treeインデクスを使用した検索
探索条件を満たすチャンクを絞り込んだら,次に対象のチャンク内のB-treeインデクスを使用した検索処理が行われます。
-
- ■チャンクのスキップができるレンジインデクスとテキストインデクスを使用した検索処理
-
-
レンジインデクスを使用した検索(チャンクのスキップ)
まず,レンジインデクスを使用した検索処理が行われます。探索条件を満たす値域のデータを格納しているチャンクかどうかを判定し,探索条件を満たさない値域のデータを格納しているチャンクであれば,そのチャンクの検索をスキップします。チャンクのスキップによって,探索条件を満たすチャンクを絞り込みます。
-
テキストインデクスを使用した検索
探索条件を満たすチャンクを絞り込んだら,次に対象のチャンク内のテキストインデクスを使用した検索処理が行われます。
-
- メモ
-
B-treeインデクスやテキストインデクスと合わせて使用する場合,レンジインデクスを使用した検索(セグメントのスキップ)は行われません。
(b) 複数のレンジインデクスを使用できる
違いはありません。「複数のレンジインデクスを使用できる」の詳細については,「2.3.3 レンジインデクス」の「(2) レンジインデクスの特徴」の「(b) 複数のレンジインデクスを使用できる」を参照してください。
(c) B-treeインデクスやテキストインデクスよりデータ容量が少なくなる
違いはありません。「B-treeインデクスやテキストインデクスよりデータ容量が少なくなる」の詳細については,「2.3.3 レンジインデクス」の「(2) レンジインデクスの特徴」の「(c) B-treeインデクスやテキストインデクスよりデータ容量が少なくなる」を参照してください。
(d) チャンクに格納されているデータの値域の幅によって検索性能が変わる
レンジインデクスを使用した検索では,チャンク内に格納されているデータの値域の幅によって検索性能が変わります。
- [説明]
-
データの格納例1の場合は,検索処理を実行するチャンク数は1つになります。一方で,データの格納例2の場合は,値域の重複があり,各チャンクの値域が格納例1に比べて広くなっています。そのため,検索処理を実行するチャンク数が3つになります。このように同じ探索条件でも,チャンクに格納されているデータの値域の幅によって,検索性能が変わります。値域を狭くすることで,検索性能が向上します。
(3) レンジインデクスの値域の更新(チャンクとセグメント)
行の追加,更新を繰り返すと,レンジインデクスが管理するチャンクの値域およびセグメントの値域が広がり,レンジインデクスの効果が薄れていきます(値域が狭くなることはありません)。また,行の削除を繰り返すと,チャンク内およびセグメント内に格納されているデータの値域に比べて,レンジインデクスの値域が広くなり,レンジインデクスの効果が薄れていきます。
レンジインデクスの効果が薄れてきた場合は,対象のレンジインデクスに対してインデクス再作成を実行し,レンジインデクスを作成し直してください。
レンジインデクスの値域が広がる条件を次の表に示します。
項番 |
実行した操作 |
レンジインデクスの値域が広がる条件 |
---|---|---|
1 |
行の追加 |
値域の範囲外の値を追加した場合に,追加行を格納するチャンクおよびセグメントの値域が広がります。 |
2 |
行の更新 |
値域の範囲外の値に更新した場合に,更新行を格納するチャンクおよびセグメントの値域が広がります。 |
3 |
行の削除 |
値域は広がりません。 |