5.3.2 B-treeインデクスを定義する列を決めるときの考慮点
HADBは,追記型の更新処理方式を採用しています。そのため,列の値が更新されると,行全体が更新されます(更新前の行は無効になり,更新後の行が新たに挿入されます)。表にB-treeインデクスが定義されている場合,行が更新されると,B-treeインデクスのキー値も更新されます。行の更新が頻繁に発生するような表にB-treeインデクスを必要以上に定義すると,更新処理の性能がその分低下します。
B-treeインデクスを定義する列を決める場合,次に示す点を考慮してください。
(1) B-treeインデクスを定義した方がよい列
B-treeインデクスを定義した方がよい列の例を次に示します。
- データを絞り込むための条件に指定する列
-
WHERE句に探索条件(検索条件)を指定して検索する場合,探索条件に指定する列にB-treeインデクスを定義しておくと,検索するページ数を削減できます(検索範囲を絞り込めます)。検索性能の向上につながるため,探索条件に指定する列の中で,データの検索範囲を絞り込める列にB-treeインデクスを定義することを検討してください。
- 表の結合の条件に指定する列(複数の表を指定して検索する場合)
-
複数の表に検索対象のデータが分散していて,共通の情報を持つ列を対応づけて検索する(表の結合を行う)場合,結合条件に指定する列にB-treeインデクスを定義しておくと,結合条件の評価回数(行の突き合わせ回数)を削減できます。検索性能の向上につながるため,結合条件に指定する列にB-treeインデクスを定義することを検討してください。
また,次の条件をすべて満たす場合は,結合条件に指定する列にレンジインデクスも定義することも検討してください。
-
B-treeインデクスを定義する表がマルチチャンク表である
-
結合条件に指定する列が,「5.5.1 レンジインデクスを定義する際の考慮点」の「(1) レンジインデクスを定義した方がよいケース」の条件を満たしている
-
(2) B-treeインデクスを定義しない方がよい列
B-treeインデクスを定義しない方がよい列の例を次に示します。
- データの重複が多い列
-
データの重複が多い列にB-treeインデクスを定義しても,データの検索範囲を絞り込めないため,検索するページ数を削減できません。検索性能が低下する原因になるため,データの重複が多い列にはB-treeインデクスを定義しないようにしてください。