除了运算符计算昂贵

时间:2018-05-09 20:03:11

标签: sql sql-server

我有一个包含30条记录的表,而一个较小的表有10条记录,两个表都具有相同的模式。我想做的就是返回一个表,其记录在大表中,但不在小表中。我找到的解决方案是使用Except运算符。但是,当我运行查询时,我花了大约30分钟。所以我只是想知道如果Except计算成本高并且耗费了大量资源?

是否有任何功能可以取代Except?谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

EXCEPT是一个集合运算符,应该进行合理优化。它确实删除了重复的值,因此会产生比预期更多的开销。

在这样的小表上花费30秒并不是那么不优化,除非你的列大小只有几兆字节。其他可能正在发生 - 例如网络或服务器争用。

EXCEPT是一种非常合理的方法。 NOT IN NULL值存在问题,仅适用于一列。当您拥有适当的索引时,NOT EXISTS将发挥最佳作用。在某些情况下,EXCEPTNOT EXISTS快。

答案 1 :(得分:-1)

没有必要为这么简单的东西制造复杂的东西。

SELECT * FROM Table1 WHERE ID NOT IN (SELECT ID FROM Table2)