SQL - 两个DISTINCT执行得很差

时间:2017-04-26 07:21:26

标签: sql performance sql-server-2012

我有两个包含同名列的表。我试图找出表2中存在哪些不同的值但不存在于表1中。为此,我有两个SELECT:

SELECT DISTINCT Field
FROM Table1

SELECT DISTINCT Field
FROM Table2

两个SELECT都在2秒内完成,每个返回约10行。如果我重构我的查询以找出Table1中缺少哪些值,则查询需要几分钟才能完成:

SELECT DISTINCT Field
FROM Table1
WHERE Field NOT IN
    (
        SELECT DISTINCT Field
        FROM Table2
    )

我的临时解决方法是将第二个不同的结果插入临时表中并与之进行比较。但表现仍然不是很好。

有谁知道为什么会这样?我猜是因为SQL-Server不断重新计算第二个DISTINCT,但为什么会这样呢?不应该以某种方式对SQL-Server进行优化吗?

1 个答案:

答案 0 :(得分:2)

不确定这是否会改善效果,但我会使用EXCEPT

SELECT Field
FROM Table1
EXCEPT
SELECT Field
FROM Table2

无需使用DISTINCT,因为EXCEPT是一个删除重复项的集合运算符。

  

EXCEPT返回左输入查询中不是的不同行   通过正确的输入查询输出。

  • 所有查询中列的数量和顺序必须相同。
  • 数据类型必须兼容。