Access アプリケーションへのオフサイト アクセスを高速化する方法

Access アプリケーションへのオフサイト アクセスを高速化する方法

MS Access 2013 で SQL Server をバックエンドとしてカレンダー型のアプリケーションを構築しました (カレンダーの各日はサブフォームです)。約 20 個のテーブルが 行を使用して接続されていますCall AttachDSNLessTable([details here])。オンサイトでの速度は問題ありませんが、VPN 経由でアクセスしようとすると、ホーム画面を読み込むだけで約 6 分かかります。その他のすべての処理には少なくとも 5 倍の時間がかかります。

代替オプションについてはよくわかりません。データベースをインターネット経由でアクセス可能にすることは可能でしょうか? そうすれば速度は上がりますか? それとも VPN の帯域幅を増やす必要がありますか? この場合の最善のオプションは何でしょうか? よろしくお願いします。

答え1

一般的なアプリケーション アーキテクチャ (リンク テーブルを使用した Access) は、この目的には適していない可能性があります。 おそらく (大部分は) 修正できますが、何らかの修正を行わないと修正できません。

重要な問題は、Access がフロントエンドである場合、Access 自体が SQLServer による処理のためにクエリ全体を送信できるかどうかを判断し、送信できないという結論に達することが多いため、テーブル全体をダウンロードしてクエリ自体を実行することです。これは特に結合の場合に当てはまり、特に使用中の各テーブルに強力な主キーがない場合に当てはまります。

以下は、SQLServer バックエンドを使用した Access リンク テーブルのパフォーマンスに関する MS Technet ドキュメントです。https://technet.microsoft.com/ja-jp/library/bb188204%28v=sql.90%29.aspx より

最も関連のある部分は次のとおりです。

クエリ パフォーマンスが低下する主な原因は、非常に大きなテーブルを含むクエリで、1 つ以上のテーブルのすべてのデータをクライアントにダウンロードする必要がある場合です。これは、結合または条件によって結果セットが少数のレコードに制限されているように見える場合でも発生する可能性があります。これは、Office Access データベース エンジンがクエリ全体を SQL Server に送信できないと判断することがあるためです。代わりに、複数のクエリ (多くの場合、テーブル内のすべての行を要求するクエリを含む) を送信し、クライアントでデータを結合またはフィルター処理します。条件でローカル処理が必要な場合は、1 つのテーブルから選択した行のみを返すクエリでも、テーブルのすべての行を返すことが必要になる場合があります。

  • JET/ODBC 診断ユーティリティを使用して、すべての作業がどこで実行されているかを判断します。
  • 可能な場合は、アクセスでスナップショット レコードセットを使用します。
  • ビューとストアド プロシージャ/関数を使用して、クエリ ロジックを SQL Server にプッシュします。
  • SQL Server に堅牢なキーとインデックスを確立し、必要に応じてインデックスが最適化されていることを確認します。
  • Access でよく使用されるデータをキャッシュします。

上記のリンクには、あなたと同じ立場にある人のための素晴らしいアドバイスや技術的な詳細が数多く掲載されています。頑張ってください!

関連情報