前回の記事では速度が遅くなる原因について掘り下げてみました。では、今回はその改善方法について紹介していきます。
↓前回の記事はこちら↓
前回の記事では、クエリが遅い原因として、リンクテーブルを対象としたクエリを実行する場合に、いったん全データをローカルに転送してきて、自端末内のAccess側で絞り込みの処理を実行しているので遅いと説明しました。
■対策1 パススルー クエリ
Accessでクエリを作成する際に、画面上部のツールバーに「パススルー」という項目があるのはご存知でしょうか? 今回紹介する対策では、このパススルークエリを紹介します。
まず、このパススルークエリとはどの様な機能なのでしょうか。
※参考までに少し内容が古いのですがMicrosoftのページのリンクを貼っておきます。
簡単に言えば、データベースサーバに対して、直接SQLを投げて実行できる機能です。
また、データを検索する処理自体も高スペックなサーバ側で処理する為、Accessを起動している自PC側の負荷は一切掛かりません。
よって、大幅な処理速度の向上が見込めます。
今回はこのパススルークエリの作り方を説明していきます。
手順1 空の新規クエリを作成する
新規クエリを作成し、「クエリデザイン」を選択します。
参照するテーブルやクエリを選択するウィンドウが表示されますが、参照先のテーブルやクエリは何も選択せずに閉じます。
手順2 作成するクエリ種類で「パススルー」を選択する
手順3 真っ白なキャンバスにSQLを書く!
上記の手順2を実施すると、真っ白なウィンドウが表示されます。データベースサーバに渡すSQLをここで記述します。
SQLの構文は渡す先のデータベースの仕様に準拠する必要があります。
後、Accessのパススルークエリ作成画面は、タブキーでのインデントも使えないし、入力補完も無く、色分けするようなハイライト機能も無いので、正直使いにくいです。SQL文自体はテキストエディタで作成して、それを張り付けて作るのが良いかと思います。
↓テキストエディタの活用記事はこちら
手順4 接続文字列を設定する
SQLが作れたら、画面右側の「プロパティシート」内の「ODBC接続文字列」を設定します。
この設定が入っていないとAccessからデータベースサーバにSQLが渡せない為、使用出来ません。
設定する接続文字列は接続先のデータベースの種類によって構文が変わります。以下のサイト様を参考にしてください。
手順5 作成したパススルークエリを保存する
保存すると、Accessファイル内のナビゲーションウィンドウ(画面左側のオブジェクト一覧)のクエリオブジェクト内に以下の画像のクエリが生成されます。
これで完成です。
手順6 作成したパススルークエリを実行する
さっそく実行してみましょう。
どうですか?劇的に早くなったのでは無いでしょうか? ボトルネックになっていたリンクテーブルを介さずに抽出処理を動かすとこんなに処理速度が向上することが理解して頂けたでしょうか?
おっと、ここまで説明してきて壁にぶつかった方もいらっしゃるかと思います。その壁というのは以下だと思います。
- そもそもSQLがわからない。
- 接続文字列に設定すべき情報がわからない。
- パススルークエリで抽出条件を動的に変えて実行する方法がわからない。
これらの問題についても、また後日解決方法を紹介してまいります。なんせ当ブログの趣旨は初心者向けなので、ちゃんと初心者の方々でもパススルークエリを活用できる方法を紹介していくつもりです。
ではみなさんごきげんよう~
↓SQLがわからない人はこちら↓
↓DAOを使ってパススルークエリを動的に作成する処理はこちら↓
↓ADOでのデータベース接続処理をクラスモジュールを活用してスマートに実装したい方はこちら↓