Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


427 / 9994 ←次へ | 前へ→

【12880】Re:テーブルにある単語を含む別テーブルのレコードを素早く削除する方法
回答  かるびの  - 15/7/23(木) 22:48 -

引用なし
パスワード
    最もオーソドックスな対策は、Bテーブルを正規化するということですね。

 現状においてFLGフィールドの値が「x4,x5,x6」となっているのが,
正規化されていないことの典型です。
 この形は、テーブルの正規化における第1正規形に反しています。
 これを、3レコードに分け、FLGフィールドの値がそれぞれ「x4」「x5」「x6」となるように
テーブルを作り直すべきです。

 テーブルの正規化がどんなものなのかは、いろいろなサイトがあるので、
それらで研究してみてください。

 
 なお、テーブルを変更すると、クエリ、フォーム、レポートなどをほぼ全面的に
作り直さなければならなくなります。
 しかし、間違ったテーブルを作ってしまった報いです。仕方ありません。
 最初からテーブルの正規化を意識しておけば、こうした全面的作り直しを避けられます。

 
 処理に時間がかかっている要因の一つは、
サブクエリにおけるWHERE句でLike演算子を使っていることですが、
Bテーブルを正規化すれば、この要因をクリアできます。


 もう一つの要因は、抽出条件の冒頭にあるIn演算子です。

 SQLを速くするための方策として、一般に、「In演算子は使うな。Exists演算子を使え」
ということが言われています。
 なので、この抽出条件をExists演算子を使った形に直せば、スピードアップが期待できます。

 では、どのように直すかですが、
私は、Exists演算子が苦手で、
いくつかの解説サイトの説明を読んでみても、
In演算子を使ったSQL文を、どうやったらExists演算子を使ったSQL文に直せるのか、
未だに理解できていません。
 そのため、Exists演算子を使う方法があるということを指摘することまでしかできません。

426 hits

【12879】テーブルにある単語を含む別テーブルのレコードを素早く削除する方法 かい 15/7/23(木) 12:30 質問[未読]
【12880】Re:テーブルにある単語を含む別テーブルの... かるびの 15/7/23(木) 22:48 回答[未読]
【12881】Re:テーブルにある単語を含む別テーブルの... かい 15/7/24(金) 7:26 お礼[未読]

427 / 9994 ←次へ | 前へ→
ページ:  ┃  記事番号:
1078188
(SS)C-BOARD v3.8 is Free