我们有一个庞大的公司表(1700 万个条目),我们希望根据搜索标准(基于电话号码)为其查找重复项。查询运行速度非常慢(5 分钟以上)
这是查询的简化版本,但问题是相同的:
SELECT C1.*
FROM dbo.Company AS C1 WITH(NOLOCK)
INNER JOIN dbo.Company AS C2 ON C2.sTelephone = C1.sTelephone
AND C1.iId_company != C2.iId_company
AND (C1.iId_third_party_id IS NULL OR
C2.iId_third_party_id IS NULL)
栏目说明:
我们什么是具有相同电话号码但不同主键(重复项)的公司,还有一部分没有第三方 ID(这告诉我们最终用户插入了它。
现在,我尝试了一些事情,但没有给我任何线索:
我最终让 UNION 结合了两个查询(每个查询都在 OR 条件上有它的一部分),但我想了解为什么在条件中使用 OR 时会有如此大的差异。
最佳答案
找出性能差异的最佳方法是检查您尝试的查询的执行计划。他们可以提供很多信息。不幸的是,我不是 SQL Server 专家,所以我不知道如何获得执行计划。
关于sql - 大表上的 T-SQL 查询根据连接条件运行缓慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1567353/