2014-01-10 71 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... 
相關問題