|
最もオーソドックスな対策は、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演算子を使う方法があるということを指摘することまでしかできません。
|
|