Microsoft Access と Microsoft SQL Compact の両方を ADODB でテストしました。
顧客情報を格納するためのテーブル tblCustomer があります
tblCustomer structure
--------------------
ID Name Email Something...
1 ABC ABC@ABC.com Something....
そして、顧客を多くのタイプに分類するための tblTag 。たとえば、リッチ カスタマー: タグ id = 1 、デット カスタマー: タグ id =2 などです。各顧客は、1 つまたは両方のタグを持つことができます。
tblTag structure
--------------------
ID TagID CustomerID
1 1 1
2 2 1
そして、それらのテーブルの列 ID、TagID、CustomerID のインデックスを既に追加しました。
しかし、金持ちのすべての顧客を取得するためにこのクエリを使用すると。クエリには 8000 ミリ秒かかり、tblCustomer に合計 170.000 のレコードがあります。
Select * from tblCustomer INNER JOIN tblTag on
tblTag.CustomerID=tblCustomer.ID where tblTag.TagID=1
だけ実行するSelect * from tblCustomer
と、3000ミリ秒しかかかりません。すべてのテーブルを取得すると、さらに高速になります。内部結合が期待どおりに実行されていません。そして、顧客が 1.000.000 レコードまで成長する可能性がある場合、8000 ミリ秒は遅すぎます。このクエリを実行するたびに、プログラムを 1 分も動かしたくありません。テーブルタグを作成するときに間違っている可能性がありますか? Rich (bit) や Debt (bit) のような列としてタグを tblCustomer に取り込む必要がありますか?