• 締切済み

accessで複合キーの処理が遅い

あるマスタデータと明細データがありキーとなる列が2つ(2列)あります マスタデータのテーブルのキー列のA列、B列を主キーとして定義し 明細データのテーブルのキー列のA列は重複ありのインデックス B列も重複ありのインデックスとしてそれぞれ設定しています その2つのキーをクエリで結合して更新する更新クエリを作成しているのですが データ量が多くなってくると非常に反応が遅くなります 同じデータ量で 2つのキー列の値をあるひとつの列に結合した値を格納しその結合列で 更新クエリを作成したところ高速に処理が動作しましたので 複合キーだった場合の処理速度が遅いのだと推測しました (※C列にA列 & B列 の結合した値を格納してC列をキーにするという事です) accessで複合キーの更新クエリを作成する場合、高速に動作させるには なにか工夫が必要なのでしょうか? アドバイス下さい 上記のように複数のキーをひとつの列に結合する工夫で早くはなったのですが・・・ 余分なデータを格納する事になるので非常に容量が大きくなってしまう問題があります

みんなの回答

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.2

明細データのテーブルのキー列のA列は重複ありのインデックス⇒idx1 B列も重複ありのインデックス⇒idx2 とすると、 A=3 and B=7 の条件を求めるときは、idx1かidx2のどちらかしか使えません。 idx1 を使ってA=3 が1000件、もしくは、idx2を使って、B=7が600件とでてきても A=3 and B=7 の3件を探すには、 1000件なり、600件なりを1件ずつ調べることになるので。 極端にいうとインデックスを両方とも使っていないかもしれません。 (パラレル処理できるDB&HWの組み合わせなら知りませんが、  一般的にはどのDBでも同じです。) インデックスを使った処理をしようと思えば、A列、B列を指定した重複ありのインデックスを 作るほうがいいです。 でも、設計の話をすると、一般には、 >マスタデータのテーブルのキー列のA列、B列を主キーとして定義し なら、 明細データのテーブルのキー列のA列、B列、連番を主キーとして定義するように思うのですが。 ## 余計な話に流れてしまいましたが。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

実際にどれくらいの効果があるか不明ですが、 複数フィールドにインデックスを作成してみては? http://www.officepro.jp/access/table/index13.html http://office.microsoft.com/ja-jp/access-help/HA010210347.aspx 失礼。 更新クエリでしたね。かえって遅くなりそうです。 ならば、WHERE条件で絞り込みは出来ないのでしょうか?

関連するQ&A