我有一个SQL Server 2008 R2数据库表在那里我试图筛选出使用下面的查询SQL Server查询执行速度很慢时比较主键
SELECT a1.Id, a2.Id
FROM Addresses a1
INNER JOIN Addresses a2 ON a1.PhoneNumber = a2.PhoneNumber
WHERE a1.Id < a2.Id
重复的电话号码和标志他们12K地址记录注意:我知道有另一种方法可以通过使用EXISTS
来解决这个问题,但这不是讨论的一部分。
该表在ID字段中具有一个集群索引的主键,碎片级别为0,电话号码字段不为空,并且在12k条记录中有大约130个副本。为了确保它不是服务器或数据库实例问题,我在4个不同的系统上运行它。
执行查询需要几分钟,有时需要几个小时。在尝试几乎所有事情之后,我将其删除了主键,然后在没有它的情况下运行查询,并在1秒内执行。我添加了主键,它仍然在一秒钟内运行。
有没有人有一个想法是什么导致这个问题?
主键是否有可能被破坏?
编辑:我的道歉,我有几个错别字在SQL查询
更改的查询没有按不会改变我的答案 - 这些字段是否被索引? – JNK