我從.net調用一些參數化的sql。我不知道爲什麼,但在SQL如果參數爲空時相比,其不包括對檢查時運行非常緩慢:參數化SQL和NULL運行緩慢
所以這個:
exec sp_executesql N'
SELECT [id]
FROM [tblAddress] (nolock)
WHERE 1 = 1
AND ([id] = @id OR @id IS NULL)
',N'@id int',
@id=4395
奔跑越快,這一點:
exec sp_executesql N'
SELECT [id]
FROM [tblAddress] (nolock)
WHERE 1 = 1
AND ([id] = @id)
',N'@id int',
@id=4395
運行SQL事件探查器超過100萬行的頂部查詢的持續時間爲175,其讀取爲3720,但第二個查詢的持續時間爲1且只有3個讀取。
爲什麼會有這樣的差異,怎麼能改進?
這樣更快,謝謝。我不明白爲什麼它會掃描給定'@id IS NULL'語句不需要表? – 2011-03-29 05:07:59
'1 = 1'又如何加快速度?它是否總是在使用OR語句時進行掃描,而不管正在評估什麼? – 2011-03-29 05:11:07
1 = 1僅適用於dnycmic SQL,因此我認爲您需要它。這不是必需的。 @ID仍然是一個參數,所以需要包含在計劃中,當它不是NULL時。但是,爲什麼你仍然在使用sp_executesql ...? – gbn 2011-03-29 05:12:56