dポイントプレゼントキャンペーン実施中!

あるマスタデータと明細データがありキーとなる列が2つ(2列)あります

マスタデータのテーブルのキー列のA列、B列を主キーとして定義し
明細データのテーブルのキー列のA列は重複ありのインデックス
B列も重複ありのインデックスとしてそれぞれ設定しています

その2つのキーをクエリで結合して更新する更新クエリを作成しているのですが
データ量が多くなってくると非常に反応が遅くなります

同じデータ量で
2つのキー列の値をあるひとつの列に結合した値を格納しその結合列で
更新クエリを作成したところ高速に処理が動作しましたので
複合キーだった場合の処理速度が遅いのだと推測しました
(※C列にA列 & B列 の結合した値を格納してC列をキーにするという事です)

accessで複合キーの更新クエリを作成する場合、高速に動作させるには
なにか工夫が必要なのでしょうか?
アドバイス下さい

上記のように複数のキーをひとつの列に結合する工夫で早くはなったのですが・・・
余分なデータを格納する事になるので非常に容量が大きくなってしまう問題があります

A 回答 (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列、連番を主キーとして定義するように思うのですが。
## 余計な話に流れてしまいましたが。
    • good
    • 0

実際にどれくらいの効果があるか不明ですが、


複数フィールドにインデックスを作成してみては?
http://www.officepro.jp/access/table/index13.html
http://office.microsoft.com/ja-jp/access-help/HA …

失礼。
更新クエリでしたね。かえって遅くなりそうです。
ならば、WHERE条件で絞り込みは出来ないのでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す