g.f*_*ley 2 sql t-sql sql-server sql-server-profiler
我正在从.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
Run Code Online (Sandbox Code Playgroud)
然后运行得更快:
exec sp_executesql N'
SELECT [id]
FROM [tblAddress] (nolock)
WHERE 1 = 1
AND ([id] = @id)
',N'@id int',
@id=4395
Run Code Online (Sandbox Code Playgroud)
运行SQL事件探查器超过100万行的最高查询的持续时间为175,其读取为3720,但第二个查询的持续时间为1,只有3个读取.
为什么会有这样的差异?如何改进呢?
OR子句不是SARGABLE所以使用的计划有扫描,而不是像第二个那样的搜索
试试这个:2寻求
SELECT [id]
FROM [tblAddress]
WHERE [id] = @id
UNION ALL
SELECT [id]
FROM [tblAddress]
WHERE @id IS NULL)
Run Code Online (Sandbox Code Playgroud)
注意:您不需要NOLOCK提示.要么1=1
| 归档时间: |
|
| 查看次数: |
1297 次 |
| 最近记录: |