更快速地验证SQL Server中的现有记录

时间:2014-01-10 15:27:38

标签: sql sql-server count

我想知道这两个SQL句子中的哪一个在性能和最佳实践中更好,以便找到现有记录?还有另一种有效的方法吗?

IF EXISTS(SELECT 1 FROM TABLE WHERE ID = @ID)
BEGIN
--VALIDATION
END

OR

SET @VARIABLE = SELECT COUNT(1) FROM TABLE WHERE ID = @ID)
IF(@VARIABLE > 0)
BEGIN
--VALIDATION
END

1 个答案:

答案 0 :(得分:6)

如果你需要知道的是根本就有任何行,那么第一个更好 - 一旦子查询找到第一个匹配的行,EXISTS就会完成。

COUNT(1)必须找到所有匹配的记录才能返回准确的计数,如果需要的只是>0

,那么几乎可以忽略不计。

另外(恕我直言),存在语句读得更清楚(尽管第二个语句并不真正需要变量)。

更新评论

保存示例存在结果作为变量,以澄清针对该问题的一些评论:

DECLARE @exists BIT
SET @exists = (CASE 
                   WHEN EXISTS(SELECT 1 FROM TABLE WHERE ID = @ID) THEN 1
                   ELSE 0
               END)

...

IF @exists = 1 
BEGIN...