3.4.1 インデクスの基本構造
インデクスは,キーとキー値から構成されます。列の内容を示した列名のことをキーといいます。また,列の値のことをキー値といいます。表を検索するときのキーとなる列にインデクスを作成しておくと,表の検索性能が向上します。インデクスを作成する方がよい列を次に示します。
-
データを絞り込むための条件に使用する列
-
表の結合処理の条件として使用する列
-
データのソート又はグループ分けの条件として使用する列
-
参照制約を定義した構成列(外部キー)
また,HiRDBから提供されるインデクスは,B-tree構造になっています。B-tree構造中の最上位のインデクスページをルートページ,最下位のインデクスページをリーフページ,中間のインデクスページを中間ページといいます。ルートページと中間ページは下段のページを指しています。リーフページはキー値と行識別子を持っています。
インデクスのB-tree構造を次の図に示します。
- 〔説明〕
-
段数3で「商品コード」列にインデクスを作成した場合の,「SCODE」をキーとし,「101L〜671M」をキー値とするB-tree構造のインデクスです。
(1) インデクスの効果
インデクスはB-tree構造であり,キー値を昇順又は降順に格納しているため,条件を満たすキー値を効率良く検索できます。また,そのキー値に対応する行識別子を持っているため,条件を満たす行を効率良く取り出せます。
(2) 単一列インデクスと複数列インデクス
インデクスには,単一列インデクスと複数列インデクスがあります。表の一つの列で作成した一つの列のインデクスを単一列インデクスといいます。単一列インデクスは,一つの列をキーにして検索する場合に指定します。表の複数の列で作成した一つのインデクスを複数列インデクスといいます。複数列インデクスは,次に示す場合に指定してください。
-
検索するデータを複数の条件を満たすデータだけに絞り込む場合
-
探索条件でデータを絞り込んだ後,グループ分けやソートなどをする場合
-
一つの表に作成した複数の複数列インデクスが,それぞれある列で重複している場合
(3) コストベースの最適化
ある表にインデクスが複数作成されている場合,HiRDBは表の検索で指定された探索条件を基にして,最もアクセスコストの少なく,最適と判断したインデクスを優先して選択します。このようにHiRDBが最適と判断したインデクスを優先して選択する処理をコストベースの最適化といいます。HiRDBが判断するアクセスコストには,次に示すものがあります。
-
指定された探索条件によるヒット率
-
SQL処理に掛かる入出力処理の回数
-
SQL処理に掛かるCPU負荷
HiRDBはコストベースの最適化をするため,表の検索性能が向上します。特に,探索条件を指定したSQLを実行する場合でも,表の検索性能を低下させません。このため,インデクスのアクセスの優先順位を意識しないでUAPを作成できます。ただし,HiRDBに最適なインデクスを使用させるには,探索条件が指定された列にインデクスが定義されていることが前提になります。