星期六, 10月 02, 2010

[SQL] IF EXISTS VS SELECT COUNT(*)

寫 T-SQL 語法時,常常需要判斷某些筆資料是否存在,重點是資料存在與否,來進行接下來的邏輯判斷,而非資料明細內容或是有多少筆數,此情況建議使用 IF EXISTS() 來達到此要求,而不要使用 SELECT COUNT(*) 來判斷,主要原因是因為 IF EXISTS() 只會判斷資是否有資料,當出現第一筆符合條件的資料,就不會繼續往下尋找,而 SELECT COUNT(*) 則是會找出全部資料才停止,SELECT COUNT(*) 會浪費較多的 I/O 和 CPU 處理時間。
-- 範例使用 AdventureWorks 內的 Sales.StoreContact 來說明

-- 建議用法
IF EXISTS(SELECT 1 FROM Sales.StoreContact WHERE CustomerID = 24)
    -- 邏輯判斷
 
-- 避免用法 1
IF EXISTS(SELECT COUNT(*) FROM Sales.StoreContact WHERE CustomerID = 24)
    -- 邏輯判斷
 
-- 避免用法 2
DECLARE @count int
SET @count = 0
SELECT @count = COUNT(*) FROM Sales.StoreContact WHERE CustomerID = 24
IF @count > 0
   -- 邏輯判斷
   
-- 避免用法 3
IF (SELECT COUNT(*) FROM Sales.StoreContact WHERE CustomerID = 24) > 0
    -- 邏輯判斷

3 則留言:

Robert 提到...

專家捏!...真利害

TerryTsai 提到...

整理一下收集來的資料而已啦 ~~

SHAO-WEI 提到...

感謝分享~
很實用!!

張貼留言