在MSDN FORUM 小朱 多條件查詢SQL 查詢的討論中,
說明到關於效能的問題,Dotjum這邊就就針對三種多條件查詢語法,
使用 執行計畫 作一各小小的比較。(還請各位多指教關於執行計畫效能評估)
說明到關於效能的問題,Dotjum這邊就就使用 執行計畫 作一各小小的比較,
(這邊強調一下,因為Dotjum不太會用 執行計畫 評估成本,
所以是直接看最後一個數據,若有錯誤,還請各位多多指教)
這次多條件的查詢,Dotjum增加了再看 SubText 中的 Procedure 中,
有看到另一種多條建的查詢語法使用 IsNull ,話不多說,
就來看整個比較,首先我使用了 AdventureWorks 資料庫,總共資料約 121317 筆資料。
-- 總共 121317
SELECT COUNT(*) FROM
Sales.SalesOrderDetail
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)
1.直接串指令是最快 2. OR ISNULL 次快 3. CASE WHEN 最慢
但因為單機執行,也無法就決定性的說哪一個比較好,但Dotjum自己的觀念是如果能夠把參數都決定好,
在程式上比較好控制(這是我自己覺得的),當然如果做好一個專門串指令的Class,或許也不會那麼複雜,
效能方面也可以感覺起來比較好,還請各位多給指教。