2013-10-28 72 views
0

我已經用ADODB測試了Microsoft Access和Microsoft SQL Compact。爲什麼內部連接速度太慢?

我有用於存儲客戶信息

tblCustomer structure 
-------------------- 
ID Name Email  Something... 
1 ABC [email protected] Something.... 

而一個tblTag的類別客戶到許多類型的表格tblCustomer。例如富客戶:標籤id = 1,債務客戶:標籤id = 2。每個客戶可以有一個或兩個標籤。

tblTag structure 
-------------------- 
ID TagID CustomerID 
1 1  1 
2 2  1 

然後我已經添加索引列ID,標籤識別,客戶ID的那些表。

但是,當我使用這個查詢獲取所有豐富的客戶。查詢需要8000毫秒,tblCustomer中的總共170.000條記錄。

Select * from tblCustomer INNER JOIN tblTag on 
tblTag.CustomerID=tblCustomer.ID where tblTag.TagID=1 

如果我只運行Select * from tblCustomer,它只需要我3000毫秒。當我拿到所有桌子時,速度會更快。內部連接未按預期運行。而8000毫秒對我來說太慢了,當客戶可以長到1,000,000條記錄時,我不希望我的程序在每次運行此查詢時都會眩暈一分鐘。所以可能是我創建表格標籤時出錯了?我是否應該將標籤作爲Rich(bit)或Debt(bit)這樣的列帶入tblCustomer?

+2

您是否有tblTage的索引,其中第一個索引列是CustomerID?從您的描述中不清楚。 – ErikEJ

+0

是的,第一個索引列是客戶ID,沒有任何變化 – monocular

回答

0

對於某些情況,請嘗試使用LEFT JOIN而不是INNER JOIN。希望它有幫助!

+0

它甚至使程序眩暈了一分鐘:( – monocular

+0

我通常使用LEFT JOIN來降低延遲,因爲你說Select * from tblCustomer帶你3000ms,這很正常有5000 + ms加入表格。在你的情況下,JEFT JOIN比INNER JOIN快得多嗎? – Bejibun

0

正確地索引您的所有表格。 Cluster索引最重要的字段(看起來像tblTag中的CustomerID和tblCustomer中的ID),並在tblTag中的TagID上放置了一個常規索引。