カーソル位置の重要性

適用先: Access 2013、Office 2013

Every cursor uses temporary resources to hold its data. これらのリソースには、メモリ、ディスク上のページング ファイル、ディスク上の一時ファイルの他、データベース内の一時記憶域が使用される場合もあります。 これらのリソースがクライアント コンピューター側にある場合、そのカーソルは "クライアント側" カーソルと呼ばれます。 一方、これらのリソースがサーバー上にある場合、そのカーソルは "サーバー側" カーソルと呼ばれます。

クライアント側カーソル

ADO で、 adUseClientCursorLocationEnum を使用してクライアント側カーソルを呼び出します。 キーセット カーソル以外のクライアント側カーソルでは、サーバーが結果セット全体をネットワーク経由でクライアント コンピューターに送信します。 クライアント コンピューターは、カーソルおよび結果セットに必要な一時リソースを用意し、これを管理します。 クライアント側アプリケーションは、結果セット全体を参照して、必要な行を判断できます。

静的クライアント側カーソル、およびキーセット方式のクライアント側カーソルでは、カーソルに多くの行が含まれる場合に、ワークステーションに多大な負荷がかかる可能性があります。 すべてのカーソル ライブラリには、数千の行を含むカーソルを作成する機能が備わっていますが、そのような大きな行セットをフェッチするよう設計されているアプリケーションは、パフォーマンスが低い場合があります。 もちろん例外はあります。 アプリケーションによっては、大容量のクライアント側カーソルが最も適しており、パフォーマンスもそれほど低下しないものがあります。

クライアント側カーソルの明確な利点の 1 つは、反応が速いことです。 結果セットがクライアント コンピューターにダウンロードされた後は、非常に迅速に行を参照できます。 また、クライアント側カーソルを使用すると、カーソルに必要なリソースがサーバーではなく各クライアントで個別に用意されるため、一般にアプリケーションの拡張性が高いと言えます。

サーバー側カーソル

ADO で、 adUseServerCursorLocationEnum を使用してサーバー側カーソルを呼び出します。サーバー側カーソルを使用すると、サーバーコンピューターによって提供されるリソースを使用して結果セットが管理されます。 サーバー側カーソルは、要求されたデータのみをネットワーク経由で返します。 この種類のカーソルを使用すると、特にネットワーク トラフィックの混雑が問題となる状況では、クライアント側カーソルよりも高いパフォーマンスを得ることができる場合があります。

しかし、サーバー側カーソルは、少なくとも一時的には、すべてのアクティブなクライアントについて、貴重なサーバーのリソースを消費してしまうため、注意する必要があります。 このことを考慮して、アクティブなクライアントから要求されるすべてのサーバー側カーソルを管理できるだけのサーバー ハードウェアを用意するよう計画する必要があります。 また、サーバー側カーソルでは、単一の行にしかアクセスできない (バッチ カーソルが利用できない) ため、処理に時間がかかる場合があります。

サーバー側カーソルは、レコードを挿入、更新、または削除するときに便利です。 サーバー側カーソルを使用すると、同じ接続に複数のアクティブなステートメントを含めることができます。