3.3.3 検索性能の向上策

詳細クラスでは,2バッファ方式を利用することで,レコードの検索性能を向上させることができます。この方式は,取得するResultSetがSetMaxRowsメソッドで指定したレコード数より多く,PageNextメソッドで次のResultSetを読み込んだりする必要のある場合に効果があります。取得するResultSetが,SetMaxRowsメソッドで指定したレコード数より少ないことが分かっている場合は,2バッファ方式を指定する意味はありません。

2バッファ方式は,DBStatementクラス,DBPreparedStatementクラス,DBCallableStatementクラスのSetResultSetTypeメソッドで設定します。

なお,ResultSetへ一度にレコードを取得できた場合は,2バッファ方式を指定した場合でも,バッファは一つしか作成されないため,2バッファ方式を指定することで処理が遅くなるようなことはありません。

<この項の構成>
(1) バッファを一つ使う場合
(2) バッファを二つ使う場合

(1) バッファを一つ使う場合

DABrokerは検索結果を取得するように要求された後,データを取得します。次の検索要求に対する実行は,先に取得したデータの処理が終わった後です。

この方法では,並行して処理を実行できませんが,2バッファの場合と比べて使用するメモリの量が半分で済みます。

また,次の検索結果を取得するまでにユーザの行う処理が短いときには,この方式が有効な場合があります。2バッファ方式を指定して検索すると,DABrokerではスレッドの生成とイベントによる待ち合わせが行われるため,連続して検索結果を取得するような場合には余分な処理によって遅くなることがあります。

(2) バッファを二つ使う場合

一つめのバッファの検索結果に対してユーザが処理を行っている間に,並行して別のスレッドでもう一つのバッファにデータベースのデータを読み込めます。

デメリットとしては,バッファを一つしか使わない場合と比べて,検索結果を保持しておくためのメモリ使用量が2倍になります。検索結果を保持しておくための領域は検索するフィールド数と一度に取得するレコード数に比例して多く必要になります。

次のような場合,2バッファ方式で検索結果を効率よく取得できます。