0

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 に取り込む必要がありますか?

4

2 に答える 2

0

場合によっては、INNER JOIN の代わりに LEFT JOIN を使用してみてください。うまくいけば、それは役に立ちます!

于 2013-10-28T16:41:52.713 に答える
0

すべてのテーブルに適切にインデックスを付けます。最も重要なフィールドにクラスタ インデックスを付け (tblTag では CustomerID になり、tblCustomer では ID になるようです)、tblTag の TagID に通常のインデックスを付けます。

于 2013-10-28T17:57:30.437 に答える