スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド

[目次][索引][前へ][次へ]

4.5.7 検索方式

<この項の構成>
(1) 検索方式の種類
(2) 処理方式
(3) SELECT-APSL
(4) 複数のインデクスを使用した検索
(5) 内部的に作成した作業表の検索
(6) 行識別子を使用した検索
(7) 外部サーバに対する問合せ結果の検索

(1) 検索方式の種類

検索方式の種類及び特徴(リストスキャン(LIST SCAN),ROWID FETCH,FOREIGN SERVER SCAN,及びFOREIGN SERVER LIMIT SCANを除く)を次の表に示します。

リストスキャンは,ビュー表の検索,WITH句問合せ式などで,いったん作業表を作成して検索する場合に適用されます。ROWID FETCHは,カーソルを使用した場合などに適用されます。FOREIGN SERVER SCAN及びFOREIGN SERVER LIMIT SCANは,自HiRDBが外部サーバからの検索結果を取得する場合に適用されます。

表4-12 検索方式の種類及び特徴

検索方式 処理方式 長所 短所
テーブルスキャン
(TABLE SCAN)
表が格納されているページ(データページ)を順次サーチして,すべての行を参照する方式です。
初回のデータ取り出しは,やや遅いです。
全件検索をする場合は高速に検索できます。
また,インデクスでの絞り込みができない場合も,高速に検索できます。
条件によって検索結果を絞り込める場合でも,すべてのデータページを参照するため,性能は悪くなります。
インデクススキャン
(INDEX SCAN,
MULTI COLUMNS INDEX SCAN,
PLUGIN INDEX SCAN)
インデクスをバイナリサーチして,目的のデータの行識別子を取得するごとに,その行識別子が指すデータページ中の行を参照する方式です。
初回のデータ取り出しは,速いです。
インデクスで絞り込める場合は高速に検索できます。
インデクス構成列の値の順(又は逆)に行を取得できます。※1
クラスタキーインデクスの場合は,あまり絞り込めない場合でも高速に検索できます。
インデクスであまり絞り込めない場合は,データページに対するランダムな入出力が増え,性能が悪くなります。
キースキャン
(KEY SCAN,
MULTI COLUMNS KEY SCAN,
PLUGIN KEY SCAN)
インデクスをバイナリサーチして,インデクス中のデータ(インデクス構成列の値又は行識別子)だけを参照する方式です。
インデクスの構成列又は行識別子だけを参照する場合に適用されます。
初回のデータ取り出しは,速いです。
インデクスであまり絞り込めない場合でも,データページの入出力がなく,インデクスページを参照するだけなので,高速に検索できます。
また,インデクス構成列の値の順(又は逆)に行を取得できます。※1
特にありません。
SELECT-APSL ?パラメタを含んだ条件がある場合,あらかじめ検索方法の候補を複数作成しておいて,?パラメタの値を入力する時点で最適な検索方法を決める方式です。
初回のデータ取り出しの速さは,実際に選択された検索方法によって異なります。
?パラメタの値を入力する時点で,インデクスでの絞り込み率を考慮して最適な検索方法を選択できます。 最適化情報収集ユティリティ(pdgetcst)を実行しておく必要があります。※2
また,複数の検索方法の候補を作成するため,SQLオブジェクトのサイズが大きくなります。
ANDの複数インデクス利用
(AND PLURAL INDEXES SCAN)
複数のインデクスを使用して複数の作業表を作成し,作業表間の積集合,和集合,及び差集合を組み合わせて結果を求める方式です。
初回のデータ取り出しは,遅いです。
積集合,和集合,及び差集合を組み合わせて結果を求めるため,複雑な条件を指定した場合でも,インデクスを使用しての評価ができます。 作業表を複数個作成し,それぞれの作業表に対してソートをするため,インデクスであまり絞り込めない場合は,ソートする件数が多くなるため,性能が悪くなります。
ORの複数インデクス利用
(OR PLURAL INDEXES SCAN)
複数のインデクスを使用して検索した結果を,一つの作業表に格納して,最後に重複排除をして結果を求める方式です。
初回のデータ取り出しは,遅いです。
OR演算子で結ばれたそれぞれの探索条件に対して,インデクスで絞り込める場合は,高速に検索できます。 複数のインデクスを使用して検索した結果を,一つの作業表に格納してソート及び重複排除をするため,重複排除する前の件数が多い場合には,性能が悪くなります。

注※1
ソートが必要な処理に対して,インデクス構成列の値の順(又は逆)に行を取得できることから,HiRDBはソートが不要と判断して,ソート処理をキャンセルする場合があります。

注※2
最適化情報収集ユティリティを実行した場合でも,最適なアクセスパスを選択できないときがあります。最適化情報収集ユティリティの実行要否については,マニュアル「HiRDB Version 8 コマンドリファレンス」を参照し,性能について十分な検証をするようにしてください。

(2) 処理方式

(a) インデクスを使用しない検索

TABLE SCAN
インデクスを使用しないで,表のデータページを検索します。
TABLE SCANの処理方式を次の図に示します。

図4-37 TABLE SCANの処理方式

[図データ]
(b) 一つのインデクスを使用した検索

INDEX SCAN
単一列インデクスのインデクスページを検索して絞り込んだ後,表のデータページを検索します。
INDEX SCANの処理方式を次の図に示します。

図4-38 INDEX SCANの処理方式

[図データ]

KEY SCAN
単一列インデクスのインデクスページだけを検索します。データページは検索しません。
KEY SCANの処理方式を次の図に示します。

図4-39 KEY SCANの処理方式

[図データ]

MULTI COLUMNS INDEX SCAN
複数列インデクスのインデクスページを検索して絞り込んだ後,表のデータページを検索します。
MULTI COLUMNS INDEX SCANの処理方式を次の図に示します。

図4-40 MULTI COLUMNS INDEX SCANの処理方式

[図データ]

MULTI COLUMNS KEY SCAN
複数列インデクスのインデクスページだけを検索します。データページは検索しません。
MULTI COLUMNS KEY SCANの処理方式を次の図に示します。

図4-41 MULTI COLUMNS KEY SCANの処理方式

[図データ]

PLUGIN INDEX SCAN
プラグインインデクスを使用して絞り込んだ後,表のデータページを検索します。
PLUGIN INDEX SCANの処理方式を次の図に示します。

図4-42 PLUGIN INDEX SCANの処理方式

[図データ]

PLUGIN KEY SCAN
プラグインインデクスを使用してインデクスページだけを検索します。データページは検索しません。
PLUGIN KEY SCANの処理方式を次の図に示します。

図4-43 PLUGIN KEY SCANの処理方式

[図データ]

(3) SELECT-APSL

SELECT-APSL(HiRDB/パラレルサーバの場合)
条件に?パラメタを含んでいる場合,?パラメタの値によって最適な検索方法が変わることがあります。また,前処理時に?パラメタの値が決まらないため,最適な検索方法が決定できません。そのため,SQL実行時にヒット率を計算して検索方法を決定します。

(4) 複数のインデクスを使用した検索

AND PLURAL INDEXES SCAN
AND演算子又はOR演算子で結ばれた探索条件に対して,それぞれのインデクスを使用して検索し,行識別子(ROWID)をそれぞれの作業表に格納します。これらの作業表を,AND演算子の場合は積集合,OR演算子の場合は和集合,ANDNOT演算子(ASSIGN LIST文でだけ使用できます)の場合は,差集合をとって一つの作業表にまとめます。その後,この作業表の行識別子を基に行を取り出します。
各条件から行識別子の作業表を作成する場合に,条件列にインデクスがなくても,TABLE SCANによって作業表を作成するときがあります。
AND PLURAL INDEXES SCANの処理方式を次の図に示します。

図4-44 AND PLURAL INDEXES SCANの処理方式

[図データ]

OR PLURAL INDEXES SCAN
OR演算子で結ばれた探索条件に対して,それぞれのインデクスを使用して検索し,行識別子(ROWID)を一つの作業表に格納します。この作業表の重複する行を重複排除した後,行識別子を基に行を取り出します。
各条件から行識別子の作業表を作成する場合に,条件列にインデクスがなくても,TABLE SCANによって作業表を作成するときがあります。
OR PLURAL INDEXES SCANの処理方式を次の図に示します。

図4-45 OR PLURAL INDEXES SCANの処理方式

[図データ]

(5) 内部的に作成した作業表の検索

LIST SCAN
内部的に作成した作業表を検索します。
LIST SCANの処理方式を次の図に示します。

図4-46 LIST SCANの処理方式

[図データ]

(6) 行識別子を使用した検索

ROWID FETCH
行識別子(ROWID)をキーにして表を検索します。行を取り出す必要がない場合は検索しません。
ROWID FETCHの処理方式を次の図に示します。

図4-47 ROWID FETCHの処理方式

[図データ]

(7) 外部サーバに対する問合せ結果の検索

FOREIGN SERVER SCAN
自HiRDBから外部表のある外部サーバに対してSQLを実行して,問合せに対する検索結果を受け取ります。
FOREIGN SERVER SCANの処理方式を次の図に示します。

図4-48 FOREIGN SERVER SCANの処理方式

[図データ]

FOREIGN SERVER LIMIT SCAN
先頭からn行の検索結果を取得する機能を使用している場合,自HiRDBから外部表のある外部サーバに対してORDER BY句を含むSQLを実行して,問合せに対する検索結果の先頭からn行を受け取ります。
FOREIGN SERVER LIMIT SCANの処理方式を次の図に示します。

図4-49 FOREIGN SERVER LIMIT SCANの処理方式

[図データ]