【发布时间】:2012-04-06 08:17:33
【问题描述】:
我的查询很简单:
select a.ID, a.adres, a.place, a.postalcode
from COMPANIES a, COMPANIES b
where a.Postcode = b.Postcode
and a.Adres = b.Adres
and (
select COUNT(COMPANYID)
from USERS
where COMPANYID=a.ID
)>(
select COUNT(COMPANYID)
from USERS
where COMPANYID=b.ID
)
数据库:sql server 2008 r2
我正在尝试做的事情: COMPANIES 表包含双重条目。我想知道连接到最多用户的那些。所以我只需要更改那些最少的外键。 (我已经知道双打的ID了)
现在需要很长时间才能完成。我想知道是否可以更快地完成
【问题讨论】:
-
您是否在连接和 where 子句列上定义了索引?
-
是的,ID 是公司的主键,companyid 被索引,因为我们经常使用连接来搜索用户。
-
还有
Postcode和Adres字段的自联接? -
邮政编码是 (nvarchar) adres no (nvarchar)
-
这可能是您查询缓慢的原因。顺便说一句,您应该使用正确的
JOIN子句,而不是与WHERE交叉连接(更多的是风格问题而不是性能问题)。
标签: sql tsql comparison sql-server-2008-r2