4.5.7 検索方式
- 〈この項の構成〉
(1) 検索方式の種類
検索方式の種類及び特徴(リストスキャン(LIST SCAN),及びROWID FETCHを除く)を次の表に示します。
リストスキャンは,ビュー表の検索,WITH句問合せ式などで,いったん作業表を作成して検索する場合に適用されます。ROWID FETCHは,カーソルを使用した場合などに適用されます。
検索方式 |
処理方式 |
長所 |
短所 |
---|---|---|---|
(TABLE SCAN) |
表が格納されているページ(データページ)を順次サーチして,すべての行を参照する方式です。 初回のデータ取り出しは,やや遅いです。 |
全件検索をする場合は高速に検索できます。 また,インデクスでの絞り込みができない場合も,高速に検索できます。 |
条件によって検索結果を絞り込める場合でも,すべてのデータページを参照するため,性能は悪くなります。 |
(INDEX SCAN, MULTI COLUMNS INDEX SCAN, PLUGIN INDEX SCAN) |
インデクスをバイナリサーチして,目的のデータの行識別子を取得するごとに,その行識別子が指すデータページ中の行を参照する方式です。 初回のデータ取り出しは,速いです。 |
インデクスで絞り込める場合は高速に検索できます。 クラスタキーインデクスの場合は,あまり絞り込めない場合でも高速に検索できます。 また,ソート処理を省略できる場合があります。※1 |
インデクスであまり絞り込めない場合は,データページに対するランダムな入出力が増え,性能が悪くなります。 |
(KEY SCAN, MULTI COLUMNS KEY SCAN, PLUGIN KEY SCAN) |
インデクスをバイナリサーチして,インデクス中のデータ(インデクス構成列の値又は行識別子)だけを参照する方式です。 インデクスの構成列又は行識別子だけを参照する場合に適用されます。 初回のデータ取り出しは,速いです。 |
インデクスであまり絞り込めない場合でも,データページの入出力がなく,インデクスページを参照するだけなので,高速に検索できます。 また,ソート処理を省略できる場合があります。※1 |
特にありません。 |
?パラメタを含んだ条件がある場合,あらかじめ検索方法の候補を複数作成しておいて,?パラメタの値を入力する時点で最適な検索方法を決める方式です。 初回のデータ取り出しの速さは,実際に選択された検索方法によって異なります。 |
?パラメタの値を入力する時点で,インデクスでの絞り込み率を考慮して最適な検索方法を選択できます。 |
最適化情報収集ユティリティ(pdgetcst)を実行しておく必要があります。※2 また,複数の検索方法の候補を作成するため,SQLオブジェクトのサイズが大きくなります。 |
|
(AND PLURAL INDEXES SCAN) |
複数のインデクスを使用して複数の作業表を作成し,作業表間の積集合,和集合,及び差集合を組み合わせて結果を求める方式です。 初回のデータ取り出しは,遅いです。 |
積集合,和集合,及び差集合を組み合わせて結果を求めるため,複雑な条件を指定した場合でも,インデクスを使用しての評価ができます。 |
作業表を複数個作成し,それぞれの作業表に対してソートをするため,インデクスであまり絞り込めない場合は,ソートする件数が多くなるため,性能が悪くなります。 |
(OR PLURAL INDEXES SCAN) |
複数のインデクスを使用して検索した結果を,一つの作業表に格納して,最後に重複排除をして結果を求める方式です。 初回のデータ取り出しは,遅いです。 |
OR演算子で結ばれたそれぞれの探索条件に対して,インデクスで絞り込める場合は,高速に検索できます。 |
複数のインデクスを使用して検索した結果を,一つの作業表に格納してソート及び重複排除をするため,重複排除する前の件数が多い場合には,性能が悪くなります。 |
- 注※1
-
ORDER BY処理やGROUP BY処理で,インデクスでソートできる場合,ソートをしないでデータを取り出します。ソート処理を省略しているかどうかは,アクセスパスで確認できます。
- 注※2
-
最適化情報収集ユティリティを実行した場合でも,最適なアクセスパスを選択できないときがあります。最適化情報収集ユティリティの実行要否については,マニュアル「HiRDB コマンドリファレンス」を参照し,性能について十分な検証をするようにしてください。
(2) 処理方式
(a) インデクスを使用しない検索
(b) 一つのインデクスを使用した検索
- INDEX SCAN
-
単一列インデクスのインデクスページを検索して絞り込んだ後,表のデータページを検索します。
INDEX SCANの処理方式を次の図に示します。
図4‒37 INDEX SCANの処理方式 - KEY SCAN
-
単一列インデクスのインデクスページだけを検索します。データページは検索しません。
KEY SCANの処理方式を次の図に示します。
図4‒38 KEY SCANの処理方式 - MULTI COLUMNS INDEX SCAN
-
複数列インデクスのインデクスページを検索して絞り込んだ後,表のデータページを検索します。
MULTI COLUMNS INDEX SCANの処理方式を次の図に示します。
図4‒39 MULTI COLUMNS INDEX SCANの処理方式 - MULTI COLUMNS KEY SCAN
-
複数列インデクスのインデクスページだけを検索します。データページは検索しません。
MULTI COLUMNS KEY SCANの処理方式を次の図に示します。
図4‒40 MULTI COLUMNS KEY SCANの処理方式 - PLUGIN INDEX SCAN
-
プラグインインデクスを使用して絞り込んだ後,表のデータページを検索します。
PLUGIN INDEX SCANの処理方式を次の図に示します。
図4‒41 PLUGIN INDEX SCANの処理方式 - PLUGIN KEY SCAN
-
プラグインインデクスを使用してインデクスページだけを検索します。データページは検索しません。
PLUGIN KEY SCANの処理方式を次の図に示します。
図4‒42 PLUGIN KEY SCANの処理方式
(3) SELECT-APSL
(4) 複数のインデクスを使用した検索
- AND PLURAL INDEXES SCAN
-
AND演算子又はOR演算子で結ばれた探索条件に対して,それぞれのインデクスを使用して検索し,行識別子(ROWID)をそれぞれの作業表に格納します。これらの作業表を,AND演算子の場合は積集合,OR演算子の場合は和集合,ANDNOT演算子(ASSIGN LIST文でだけ使用できます)の場合は,差集合をとって一つの作業表にまとめます。その後,この作業表の行識別子を基に行を取り出します。
各条件から行識別子の作業表を作成する場合に,条件列にインデクスがなくても,TABLE SCANによって作業表を作成するときがあります。
AND PLURAL INDEXES SCANの処理方式を次の図に示します。
図4‒43 AND PLURAL INDEXES SCANの処理方式 - OR PLURAL INDEXES SCAN
-
OR演算子で結ばれた探索条件に対して,それぞれのインデクスを使用して検索し,行識別子(ROWID)を一つの作業表に格納します。この作業表の重複する行を重複排除した後,行識別子を基に行を取り出します。
各条件から行識別子の作業表を作成する場合に,条件列にインデクスがなくても,TABLE SCANによって作業表を作成するときがあります。
OR PLURAL INDEXES SCANの処理方式を次の図に示します。
図4‒44 OR PLURAL INDEXES SCANの処理方式