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)あとは効果的にインデックスを使うこと、でしょうか

カテゴリ

このブログ記事について

このページは、Hiroshiが2006年9月13日 22:55に書いたブログ記事です。

ひとつ前のブログ記事は「進まない要件定義」です。

次のブログ記事は「近況いろいろ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.0