クエリ実行時にやけに重くなったと感じた場合、SQLがAccessに勝手に変更されている場合があります。
エイリアスやカッコの配置等、微妙な変更で実行速度が全然変わってしまので何とかしたい!そんな時の対処方法。
犯人は名前の自動修正
結論からお伝えすると犯人はこいつ。デフォルトでは名前の自動修正がONになっており、
その状態だと例えば以下のSQLが、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
SELECT ~省略~ FROM ((テーブルD LEFT JOIN テーブルB ON (テーブルD.カラムA = テーブルB.カラムA AND テーブルD.カラムB = テーブルB.カラムB)) LEFT JOIN テーブルC ON (テーブルB.カラムB = テーブルC.カラムB)) LEFT JOIN テーブルA ON (テーブルC.カラムA = テーブルA.カラムA) WHERE テーブルA.カラムA=4 AND テーブルD.カラムC=5; |
こんな風に改変されます↓
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
SELECT ~省略~ FROM ((テーブルD LEFT JOIN テーブルB ON (テーブルD.カラムB = テーブルB.カラムB) AND (テーブルD.カラムA = テーブルB.カラムA)) LEFT JOIN テーブルC ON テーブルB.カラムB = テーブルC.カラムB) LEFT JOIN テーブルA ON テーブルC.カラムA = テーブルA.カラムA WHERE テーブルA.カラムA=4 AND テーブルD.カラムC=5; |
たったこれだけ、ぱっと見()の配置の差異だけですが実行速度が段違い。エクセルでのエクスポートに至っては、改変された後のクエリだと重すぎて何回やっても失敗してしまうレベル。
公式でもユーザが好き勝手いじり放題なデータベースでない限り、
システムのパフォーマンスが向上し、データベースのサイズが小さくなると記載していますので、
きちんとしているAccessの場合はONにして置くメリットは薄い為とっととOFFりましょう。
名前の自動修正をOFFにする
以下の手順でOFFにします。
①ファイルタブ→オプション
②カレントデータベース→【名前の自動修正を行う(A)】のチェックを外す
単純なクエリなら特に悪さはしないですが、複数テーブルをJOINする時は邪魔してくる恐れが有るので、もしデフォルトのままの場合はOFFにしてしまいましょう(ᵔᴥᵔ)
コメント