我有一个包含30条记录的表,而一个较小的表有10条记录,两个表都具有相同的模式。我想做的就是返回一个表,其记录在大表中,但不在小表中。我找到的解决方案是使用Except
运算符。但是,当我运行查询时,我花了大约30分钟。所以我只是想知道如果Except
计算成本高并且耗费了大量资源?
是否有任何功能可以取代Except
?谢谢你的帮助!
答案 0 :(得分:2)
EXCEPT
是一个集合运算符,应该进行合理优化。它确实删除了重复的值,因此会产生比预期更多的开销。
在这样的小表上花费30秒并不是那么不优化,除非你的列大小只有几兆字节。其他可能正在发生 - 例如网络或服务器争用。
EXCEPT
是一种非常合理的方法。 NOT IN
NULL
值存在问题,仅适用于一列。当您拥有适当的索引时,NOT EXISTS
将发挥最佳作用。在某些情况下,EXCEPT
比NOT EXISTS
快。
答案 1 :(得分:-1)
没有必要为这么简单的东西制造复杂的东西。
SELECT * FROM Table1 WHERE ID NOT IN (SELECT ID FROM Table2)