在T-SQL脚本中得到奇怪的反应

时间:2014-06-01 19:01:05

标签: sql sql-server tsql sentry sql-execution-plan

我正在编写存储过程,当我在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;

它似乎是一样的,但我得到的结果是不同的:

  1. 脚本1 中的估算行: 15621 行(确实错误,行数太多)
  2. 脚本2 中的估算行数: 205 行(逻辑结果,可能为真)
  3. 我认为在where子句中使用变量时,SQL执行计划的行为会有所不同。为什么?或者这里发生了什么?如何改善这个?

    由于

0 个答案:

没有答案