我正在从.net 调用一些参数化的sql。我不确定为什么,但是在检查参数是否为 NULL 时,与不包含参数时相比,sql 运行速度很慢:
所以这:
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 次读取。
为什么会有这样的差异以及如何改进?