除了运算符计算昂贵



我有一个包含 30 条记录的表,一个较小的表有 10 条记录,两个表具有相同的架构。我想要做的只是返回一个表,其记录在大表中,但不在小表中。我找到的解决方案是使用Except运算符。但是,当我运行查询时,我花了大约 30 分钟。所以我只是想知道Except计算是否昂贵并且花费了大量资源?

有什么功能可以代替Except吗?感谢您的任何帮助!

EXCEPT

是一个集合运算符,应该合理优化。 它确实删除了重复值,因此开销比预期的要多一些。

它并非未经优化,以至于在如此小的表上需要 30 秒,除非您的列的大小以 MB 为单位。 可能正在发生其他事情 - 例如网络或服务器争用。

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

在这种情况下,您应该使用EXISTS.它是 SQL Server 中性能最高的操作之一

SELECT * 
FROM big_table b
WHERE NOT EXISTS (
SELECT 1 
FROM small_table s
WHERE s.id = b.id)

没有必要为了这么简单的事情而使事情变得复杂。

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

最新更新