【MS Access】クエリが遅い原因と速度改善について2

MS Access
スポンサーリンク

前回の記事では速度が遅くなる原因について掘り下げてみました。では、今回はその改善方法について紹介していきます。

↓前回の記事はこちら↓

【MS Access】クエリが遅い原因と速度改善について1
Microsoft Accessを使ってデータ抽出をされている人も多いかと思います。 AccessならSQLがわからなくてもGUI上の操作でデータの抽出が出来てとっても便利です。操作も分かりやすく、データベースを扱う敷居を大きく下げて...

前回の記事では、クエリが遅い原因として、リンクテーブルを対象としたクエリを実行する場合に、いったん全データをローカルに転送してきて、自端末内のAccess側で絞り込みの処理を実行しているので遅いと説明しました。

では、この「無駄なデータ転送」「ローカルPCでの処理」を見直すことが出来れば、処理は速くなると言えます。果たしてそんな見直しは可能なんでしょうか??

■対策1 パススルー クエリ

Accessでクエリを作成する際に、画面上部のツールバーに「パススルー」という項目があるのはご存知でしょうか? 今回紹介する対策では、このパススルークエリを紹介します。

まず、このパススルークエリとはどの様な機能なのでしょうか。

※参考までに少し内容が古いのですがMicrosoftのページのリンクを貼っておきます。

Access で SQL パススルー クエリを作成する方法

簡単に言えば、データベースサーバに対して、直接SQLを投げて実行できる機能です。

データベースサーバに直接SQLを投げるということは、リンクテーブルを使用しません。その為、無駄なデータ転送は一切発生しません。また、データを検索する処理自体も高スペックなサーバ側で処理する為、Accessを起動している自PC側の負荷は一切掛かりません。よって、大幅な処理速度の向上が見込めます。

今回はこのパススルークエリの作り方を説明していきます。

手順1 空の新規クエリを作成する

新規クエリを作成し、「クエリデザイン」を選択します。

参照するテーブルやクエリを選択するウィンドウが表示されますが、参照先のテーブルやクエリは何も選択せずに閉じます。



手順2 作成するクエリ種類で「パススルー」を選択する

手順3 真っ白なキャンバスにSQLを書く!

上記の手順2を実施すると、真っ白なウィンドウが表示されます。データベースサーバに渡すSQLをここで記述します。

注意が必要なのは、ここで記述したSQLをそのままサーバ側に渡す為、Access独自の関数はサーバ側へは渡せません。SQLの構文は渡す先のデータベースの仕様に準拠する必要があります。

後、Accessのパススルークエリ作成画面は、タブキーでのインデントも使えないし、入力補完も無く、色分けするようなハイライト機能も無いので、正直使いにくいです。SQL文自体はテキストエディタで作成して、それを張り付けて作るのが良いかと思います。

↓テキストエディタの活用記事はこちら

【矩形選択・正規表現】テキストエディタを活用してデータ加工
IT技術者は作業が早いと思いませんか? 大量のデータに何らかの加工をしないといけなくなったとします。加工内容は何でも良いですが、例えば、CSV形式で取引先からもらった発注データの行毎の末尾に特定の文字列を付与しないといけないとか、CS...

手順4 接続文字列を設定する

SQLが作れたら、画面右側の「プロパティシート」内の「ODBC接続文字列」を設定します。

この設定が入っていないとAccessからデータベースサーバにSQLが渡せない為、使用出来ません。

設定する接続文字列は接続先のデータベースの種類によって構文が変わります。以下のサイト様を参考にしてください。

ODBC接続文字列一覧

手順5 作成したパススルークエリを保存する

保存すると、Accessファイル内のナビゲーションウィンドウ(画面左側のオブジェクト一覧)のクエリオブジェクト内に以下の画像のクエリが生成されます。

これで完成です。

手順6 作成したパススルークエリを実行する

さっそく実行してみましょう。

どうですか?劇的に早くなったのでは無いでしょうか? ボトルネックになっていたリンクテーブルを介さずに抽出処理を動かすとこんなに処理速度が向上することが理解して頂けたでしょうか?

おっと、ここまで説明してきて壁にぶつかった方もいらっしゃるかと思います。その壁というのは以下だと思います。

  • そもそもSQLがわからない。
  • 接続文字列に設定すべき情報がわからない。
  • パススルークエリで抽出条件を動的に変えて実行する方法がわからない。

これらの問題についても、また後日解決方法を紹介してまいります。なんせ当ブログの趣旨は初心者向けなので、ちゃんと初心者の方々でもパススルークエリを活用できる方法を紹介していくつもりです。

ではみなさんごきげんよう~

↓SQLがわからない人はこちら↓

【MS Access】クエリからSQLの生成について
Accessでクエリを作成してデータ抽出は出来るけど、SQLはわからないという人は非常に多いかと思います。Accessはクエリを使えば、マウスのドラッグ&ドロップだけでデータ抽出が行えて、データベースを扱う敷居を大きく下げてくれる為、大変便...

↓DAOを使ってパススルークエリを動的に作成する処理はこちら↓

【MS Access】動的にパススルークエリを作成する
Accessでシステム開発をする場合、リンクテーブルを介したクエリを作成し、そのクエリをフォームに連携させて表示させたり、検索フォームの検索時に使用する場合もあるかと思います。 ただ、リンクテーブルとクエリの組み合わせだと、Acces...

↓ADOでのデータベース接続処理をクラスモジュールを活用してスマートに実装したい方はこちら↓

【Excel・Access VBA】データベース接続用クラスで時短プログラミング
ExcelやAccessでデータベースに接続してデータ取得やデータ更新処理を実行する場合に、ADOを利用して実装することは多いかと思いますが、データベースへの接続処理を行う度に、データベースへの接続文字列を記述したり、データベースへの接続や...
タイトルとURLをコピーしました