Access クエリー高速化
最近、DB2のテーブルをリンクしてAccessでクエリーを作ることが多いです。
でもテーブルが数十万件もあると、少し複雑なクエリーを作ると、論理的には正しいはずでも、ODBCのエラー(タイムアウト?)や、数時間たっても応答がない等の現象に悩まされます。
そこで、経験から学んだクエリーの高速化の方法をいくつか。
まずは、いつまで待つべきかについて。
Accessのウインドウの下部に、進捗バーが出てきたら、それだけでかなりの時間がかかると思ってよいです。
さらに進捗バーの進捗度合いが極端に遅い場合は、数時間以上かかる可能性が大きいので、Accessを殺して、別の方法を考えた方がいいです。
(1)最初にやってみるべきことは、「データベースの最適化/修復」。これだけで高速化できることがあります。
(2)抽出条件で、Not Like 'NN*'などは避ける。この場合、Midでフィールドの頭2文字を取って、それを、<> 'NN'としたほうが、よほど高速です。
(3)同じく、Not IN (SELECT A FROM B) は、 Not Exsists (SELECT A FROM B WHERE B.C=D) の方が高速です。
(4)(3)でサブクエリーのBが抽出条件のついたクエリーになっている場合は、まずBのクエリーをテーブル作成クエリーにして、一旦ローカルなテーブルを作って、それをBの代わりにすることでODBCのタイムアウトを回避できます。
(5)あとは効果的にインデックスを使うこと、でしょうか

