为什么内联盟太慢了?

时间:2013-10-28 16:22:21

标签: ms-access ms-access-2007 sql-server-ce ms-access-2010

我已经使用ADODB测试了Microsoft Access和Microsoft SQL Compact。

我有一个用于存储客户信息的表tblCustomer

tblCustomer structure
--------------------
ID  Name  Email        Something...
1   ABC   ABC@ABC.com  Something....

将类别客户分为多种类型的tblTag。例如,富客户:标签ID = 1,债务客户:标签ID = 2。每个客户都可以拥有一个或两个标签。

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毫秒对我来说太慢了。那么在创建表格标签时可能是我错了吗?我应该将标签作为Rich(bit)或Debt(bit)这样的列添加到tblCustomer中吗?

2 个答案:

答案 0 :(得分:0)

对于某些情况,请尝试使用LEFT JOIN而不是INNER JOIN。希望它有所帮助!

答案 1 :(得分:0)

正确索引所有表格。群集索引最重要的字段(看起来像tblTag中的CustomerID和tblCustomer中的ID),并在tblTag中将TagID放在常规索引中。