以下查询将在大约 22 秒内运行:
DECLARE @i INT, @x INT
SET @i = 156567
SELECT
TOP 1
@x = AncestorId
FROM
dbo.tvw_AllProjectStructureParents_ChildView a
WHERE
ProjectStructureId = @i AND
a.NodeTypeCode = 42 AND
a.AncestorTypeDiffLevel = 1
OPTION (RECOMPILE)
问题在于变量赋值(实际上是这一行:)@x = AncestorId
。删除分配时,它的速度高达约 15 毫秒!我通过将结果插入临时表来解决它,但我认为这是一个不好的方法。
谁能帮我解决问题的根源是什么?!
附言
糟糕的执行计划(22秒):https ://www.brentozar.com/pastetheplan/?id=Sy6a4c9bW
良好的执行计划(20毫秒):https ://www.brentozar.com/pastetheplan/?id=Byg8Hc5ZZ