AccessからOracleなどの外部DBへ接続する際、通常はリンクテーブルを経由してローカルPCでSQLを実行します。しかし、PCの性能によっては応答が遅くなることもありますよね。
そこで「パススルークエリ」を使うと、サーバー側で処理を行い、結果だけを返すため、劇的に高速化することが可能です。
この記事では、パススルークエリのメリット・デメリットを初心者にもわかりやすく解説し、実際のVBAコード例も紹介します。「処理速度が遅くて困っている…」という方必見の内容です。ぜひ最後までご覧ください。

サーバー側でSQL処理を実行すると、Accessのクエリがぐっと速くなるんですよ

え、リンクテーブルじゃ遅すぎるの?どうしてサーバー側で処理するのかな…わからないな…
パススルークエリとは
パススルークエリとは?
Accessで外部DBを参照する際、リンクテーブルを使うとSQLがローカルで実行されます。これがPCの性能に依存し、遅くなる原因に。パススルークエリはリンクテーブルを使わず、SQLをそのままサーバーへ送信し、サーバー側で処理を完結させます。
この結果として、処理速度が大幅に向上します。
パススルークエリを使うメリット
パススルークエリには主に以下のメリットがあります
- サーバー側で処理されるため、ローカルPCへの負荷が軽減される
- 大量データの集計・分析が高速になる
- 特に処理の重いクエリで効果が大きい
パススルークエリのデメリット
ただし、気を付けるべき点も存在します
- 更新系(INSERT/UPDATE/DELETE)の処理はかえって遅くなることがある
- 実測データが少なく、状況により効果が異なる可能性がある
実際のパススルークエリのコード例
以下はVBAでパススルークエリを定義・実行する一例です。
実際に私はこのようなコードで、30分以上かかっていた処理を10分弱に短縮したことがあります。
Dim Rs As DAO.Recordset
Dim Db As DAO.Database
Dim sSQL As String
Dim qDef As QueryDef
Set Db = CurrentDb()
Db.QueryDefs.Delete("Q_test")
Set qDef = Db.CreateQueryDef("Q_test")
qDef.ODBCTimeout = 0
qDef.Connect = "ODBC;DSN=●●●;UID=●●●;PWD=●●●;"
qDef.SQL = "SELECT * FROM ..." ' 実行したいSQL
qDef.ReturnsRecords = True
Set Rs = qDef.OpenRecordset
なぜ速くなるのか?
- 通常はPCがSQLを受け取り、リンクテーブルを介して外部DBへアクセスしますが、パススルークエリではSQLをそのままサーバーで処理します。
- 結果だけを受け取るため、通信量も減り、処理時間が短縮されます。
まとめ
パススルークエリは、特に読み取り系の重い処理で威力を発揮し、ローカルマシンの性能に左右されず高速化できる便利な手法です。
一方、更新処理では逆効果になり得るため、使いどころの見極めが重要です。改善余地のあるシナリオでは、ぜひ試してみてください。

処理の遅さで悩んでいたら、パススルークエリを使ってみてください。きっと世界が変わりますよ