多條件判斷查詢使用三種方法 1.直接串指令 2.TSQL WHEN 3.Is Null 效能比較

在MSDN FORUM 小朱 多條件查詢SQL 查詢的討論中,
說明到關於效能的問題,Dotjum這邊就就針對三種多條件查詢語法,
使用 執行計畫 作一各小小的比較。(還請各位多指教關於執行計畫效能評估)


說明到關於效能的問題,Dotjum這邊就就使用 執行計畫 作一各小小的比較,
(這邊強調一下,因為Dotjum不太會用 執行計畫 評估成本,
所以是直接看最後一個數據,若有錯誤,還請各位多多指教)



這次多條件的查詢,Dotjum增加了再看 SubText 中的 Procedure 中,
有看到另一種多條建的查詢語法使用 IsNull ,話不多說,
就來看整個比較,首先我使用了 AdventureWorks 資料庫,總共資料約 121317 筆資料。

-- 總共 121317
SELECT COUNT(*)  FROM  
 Sales.SalesOrderDetail

image

1.第一種比較就直接是命令字串的方式


SELECT *  FROM  
 Sales.SalesOrderDetail
WHERE CarrierTrackingNumber =  '4911-403C-98'
/*
AND
ProductID  = 776
*/
2.採用 CASE WEHN 的方式

SET @CarrierTrackingNumber =  '4911-403C-98'
DECLARE @ProductID int
SET @ProductID =  0

SELECT *  FROM  
 Sales.SalesOrderDetail
WHERE CarrierTrackingNumber = 
CASE  @CarrierTrackingNumber 
WHEN '' THEN CarrierTrackingNumber ELSE @CarrierTrackingNumber END
AND
ProductID  = 
CASE  @ProductID 
WHEN 0 THEN ProductID  ELSE @ProductID  END

3.使用 IS NULL

SET @CarrierTrackingNumber =  '4911-403C-98'
DECLARE @ProductID int
SET @ProductID =  null

SELECT *  FROM  
 Sales.SalesOrderDetail
WHERE
( CarrierTrackingNumber = 
   @CarrierTrackingNumber OR @CarrierTrackingNumber IS NULL)
 AND
(ProductID  =  @ProductID OR @ProductID IS NULL)


image imageimage

1.直接串指令是最快 2. OR ISNULL 次快 3. CASE WHEN 最慢

但因為單機執行,也無法就決定性的說哪一個比較好,但Dotjum自己的觀念是如果能夠把參數都決定好,

在程式上比較好控制(這是我自己覺得的),當然如果做好一個專門串指令的Class,或許也不會那麼複雜,

效能方面也可以感覺起來比較好,還請各位多給指教。