2017年4月22日 星期六

IF EXISTS VS SELECT COUNT(*)

引用來源: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
    -- 邏輯判斷

沒有留言:

張貼留言