2014-01-10 40 views
2

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

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 
+5

使用'IF EXISTS'。如果您只关心0或非0,则不要强制服务器进行计数。为了更高效的方式,我们可能需要知道您的查询还在做什么 - 我们可能能够将整个批次重新写入单个查询,而不是程序化编写。 –

+1

你应该尝试在一张大桌子上进行比较。 –

+0

--VALIDATION部分只是有点变量返回true或false。 SET @ EXIST = 1.这是一个标量函数 –

回答

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... 
相关问题