TechNote

事務屋のおぼえがき

Accessのパススルークエリで高速化してみたメモ

最近、外注システムのDBにAccessから接続して、分析業務を行う機会が多い。

Oracle等のフロントエンドとしてACCESSを使用する機会は、社内情シスであれば頻繁にあるだろう。そんなとき、普通はOracle内のテーブルにリンクした後、リンクテーブルをACCESSのデータベース内にあるテーブルと同じように扱う。ACCESSで書いたSQLACCESSがローカルPC側で実行するのでPCの処理能力に左右される。

このため、ローカルPCの処理速度が遅い場合は、サーバー側でクエリを処理をする「パススルークエリ」を使用すると高速化を図ることができる。

f:id:kojikoji75:20150801225140j:plain

パススルークエリを使用するメリット
  • 検索処理の高速化が図れる(はず)
パススルークエリのデメリット
  • 更新処理は遅い(らしい)

少し調べた感じ、パススルークエリも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ってなんだかんだいって便利という話 - TechNoteAccessってなんだかんだいって便利という話 - TechNote

ここ2年くらい「社内開発はちょっとしたものも全部Web実装」と決めて行動してました(学習のため半ば強引に)が、久々にAccessでちょっとしたモノをつくってみた...

一度は観ておきたい!エンジニアが主役の映画5選 (とそこで使われている技術を少々) - TechNote一度は観ておきたい!エンジニアが主役の映画5選 (とそこで使われている技術を少々) - TechNote

以前から一度まとめてみたかったタイトルの件、今更ながらまとめておきます。観たい映画がなくなった方や、エンジニアとして働いてるけど目標を見失ったという方のご参考に...

PHPからAccessデータベースの使用 - TechNotePHPからAccessデータベースの使用 - TechNote

PHPからAccessのデータベース(mdb)を利用するにはODBC経由での接続が必要。ODBCの設定手順1.「コントロールパネル」→「管理ツール」→「データソ...


業務によく効くAccess 開発現場ワザ (DB Magazine SELECTION)

業務によく効くAccess 開発現場ワザ (DB Magazine SELECTION)

中小企業向けAccess 開発実践ノウハウ (DB Magazine SELECTION)

中小企業向けAccess 開発実践ノウハウ (DB Magazine SELECTION)