Accessのパススルークエリで高速化してみたメモ
最近、外注システムのDBにAccessから接続して、分析業務を行う機会が多い。
Oracle等のフロントエンドとしてACCESSを使用する機会は、社内情シスであれば頻繁にあるだろう。そんなとき、普通はOracle内のテーブルにリンクした後、リンクテーブルをACCESSのデータベース内にあるテーブルと同じように扱う。ACCESSで書いたSQLはACCESSがローカルPC側で実行するのでPCの処理能力に左右される。
このため、ローカルPCの処理速度が遅い場合は、サーバー側でクエリを処理をする「パススルークエリ」を使用すると高速化を図ることができる。
パススルークエリを使用するメリット
- 検索処理の高速化が図れる(はず)
パススルークエリのデメリット
- 更新処理は遅い(らしい)
少し調べた感じ、パススルークエリもodbc経由という意味ではADOやDAOと同じであるが、「サーバーサイドで処理した結果を返す」という点が高速化につながっているようだ。
実際のVBAでの記述例
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") qDef.ODBCTimeout = 0 qDef.Connect = "ODBC;DSN=●●●;UID=●●●;PWD=●●●;" qDef.SQL = "SELECT * ......" qDef.ReturnsRecords = True Set Rs = qDef.OpenRecordset
実行してみると、30分以上かかっていた処理を思いSQLが10分弱に短縮された。
環境によるのかもしれないが、確かに早いことを確認できた。
あわせて読みたい
Accessってなんだかんだいって便利という話 - TechNoteここ2年くらい「社内開発はちょっとしたものも全部Web実装」と決めて行動してました(学習のため半ば強引に)が、久々にAccessでちょっとしたモノをつくってみた...
一度は観ておきたい!エンジニアが主役の映画5選 (とそこで使われている技術を少々) - TechNote以前から一度まとめてみたかったタイトルの件、今更ながらまとめておきます。観たい映画がなくなった方や、エンジニアとして働いてるけど目標を見失ったという方のご参考に...