我正在编写存储过程,当我在Execution Plan / Sentry Plan Explorer中测试过程时,我注意到在一个声明中,该计划反应奇怪。
以下是2个脚本,从我的角度来看是相同的,但结果却截然不同。
脚本1 (不是真正的代码,而是演示此问题的代码):
DECLARE @MyVariable INT;
SET @MyVariable = 123456789;
SELECT MT.Name, OT.Name
FROM MyTable MT
INNER JOIN OtherTable OT ON MT.ID = OT.MyTableID
WHERE OT.TypeID = @MyVariable;
脚本2:
SELECT MT.Name, OT.Name
FROM MyTable MT
INNER JOIN OtherTable OT ON MT.ID = OT.MyTableID
WHERE OT.TypeID = 123456789;
它似乎是一样的,但我得到的结果是不同的:
我认为在where
子句中使用变量时,SQL执行计划的行为会有所不同。为什么?或者这里发生了什么?如何改善这个?
由于