1. 程式人生 > >開發人員喜歡用的 [email protected] or @n=''

開發人員喜歡用的 [email protected] or @n=''

USE tempdb
GO
--建立測試表,並插入 100 萬條記錄
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
GO
CREATE TABLE t(
	id INT IDENTITY(1,1) PRIMARY KEY,
	n VARCHAR(20) NOT NULL	
)
GO
;WITH cte AS (
    SELECT * FROM [master].dbo.spt_values AS sv WHERE sv.[type]='p' AND sv.number BETWEEN 1 AND 1000
)
INSERT INTO t(n)
SELECT left(NEWID(),20) FROM cte AS a CROSS APPLY cte AS b
UNION
SELECT '0000F125-6485-4DDC-A'
GO
--增加索引
CREATE INDEX ix_t_n ON t(n)
GO

DECLARE @n VARCHAR(20)
SET @n='0000F125-6485-4DDC-A'

--直接查詢
SELECT * FROM t WHERE 
[email protected]
--拼or條件查詢 SELECT * FROM t WHERE [email protected] OR @n=''

可以清楚地看到:

用了 拼接條件, 雖然有索引,但執行計劃走的是索引掃描,效率很低。

最好的方式, 還是在程式中寫好條件, 有什麼就過濾什麼,沒有的條件就去掉。

不要讓 sql server 來幫你在 sql 語句中判斷。