我有一个选择一些数据的查询,我在其中传递了一些参数:
DECLARE @FromAccDocNo INT = 1,
@ToAccDocNo INT = 999999999,
@FromDate CHAR(10) = '1900/01/01',
@ToDate CHAR(10) = '2999/12/30',
@L1Code INT = 129
SELECT ad.AccDocNo,
ad.AccDocDate,
add1.Row,
add1.RowComment,
add1.Debit,
add1.Credit
FROM AccDoc ad
INNER JOIN AccDocDetail add1
ON add1.AccDocNo = ad.AccDocNo
INNER JOIN Topic t
ON t.TopicCode = add1.TopicCode
WHERE t.L1Code = @L1Code -- here is the difference
AND add1.AccDocNo BETWEEN @FromAccDocNo AND @ToAccDocNo
AND ad.EffectiveDate BETWEEN @FromDate AND @ToDate
ORDER BY
ad.AccDocNo
首先,我将值 129 显式写为@L1Code
(需要 0.010 秒)
在第二形式中我通过了@L1Code
进入查询(需要 2.500 秒)
谁能解释发生了什么?
请阅读规范参考:应用程序慢,SSMS 快? http://www.sommarskog.se/query-plan-mysteries.html(具体来说这个bit http://www.sommarskog.se/query-plan-mysteries.html#varparamreplace)
修复的一种方法是添加OPTION (RECOMPILE)
在查询的末尾。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)