投稿日 | : 2007/04/19(Thu) 19:11 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : 回答に非ず |
# 直接の回答では無いので、読む必要はないかも。
> 全件取得しての表示ではないかと思い、使用には悩んでおります。。。
最初の投稿で、
>>> 「約97件中 81〜97件を表示」と表示したいです。
と書かれていましたよね。
97件ぐらいなら、全件取得した方が効率が良い気もしますが、たとえば数万件クラスの
データであれば、最初に SELECT COUNT(*) でサーバ側に件数を問い合わせて、逐次、
「○○〜○○件目だけを取得するための SQL」を投げるスタイルの方が良いでしょうね。
(ただし、他の接続などによって、途中で件数が変化した場合のことも考慮しないといけませんが)
>> PageSize/PageCount/AbsolutePage プロパティを使うとか。
> についても調べてみました。この方法はすごくよいと思ったのですが、
良い場合もあれば、悪い場合もあります。使用するOLE DBプロバイダやデータ量など、
さまざまな要件によって、適切な解というのは異なりますから、サーバ/クライアント両者の
負荷率を調査しつつ、実際に『試して』みないと分からないと思います。
# 机上の理論だけで進めていくと、あとで泣きをみるかもしれません。
> 全件取得しての表示ではないかと思い、使用には悩んでおります。。。
だからこその、
> > keyset カーソルなどを選択する必要があるでしょう。
という回答なわけで。
既に Recordset を開いているのであれば、CursorType プロパティを確認してください。
これが静的カーソルになっているのなら、全件取得されることになります。
一方、キーセットカーソルなら、「全件分の主キー情報」+「CacheSize に指定された件数のレコード」が
読み込まれ、実際にその行に移動するまでは、データを取りに行かない仕様になっています。
ですから、サーバ・クライアント間の通信負荷は、それほど高くはなりません。
もし、キー情報さえも、全件分取得するのに抵抗があるのであれば、動的カーソルという
選択肢もあります。動的カーソルは、仕組み的にはキーセットと同様ですが、
一度に取得されるキー情報が、CasheSize で指定された件数分のみとなっています。
(動的カーソルは取扱いが面倒なので、あまりお奨めはしませんが)
ちなみに、データ量が多い場合でも、あえて静的カーソルが選択される場合もあります。
いわゆる“切断された Recordset”を使った開発手法です。
更新頻度の低い割に、利用頻度が高い情報の場合には、毎回サーバに問い合わせを行うのではなく、
最初に「切断型レコードセット」に全件分キャッシュしておいてから、クライアント上だけで
抽出してやった方が、はるかに高速に処理できます。接続型レコードセットと切断型レコードセットとでは、
フィールド値の読み書きの速度や、レコード間の移動速度でさえ、かなりの差が生じますからね。