小编Zol*_*tan的帖子

如果在WHERE子句中,常量被参数替换(具有相同的值),为什么查询会大幅减慢?

我有一个递归查询,如果WHERE子句包含常量,则执行速度非常快,但如果我用具有相同值的参数替换常量,则会变得非常慢.

查询#1 - 使用常量

;WITH Hierarchy (Id, ParentId, Data, Depth)
AS
( SELECT Id, ParentId, NULL AS Data, 0 AS Depth
  FROM Test
  UNION ALL
  SELECT h.Id, t.ParentId, COALESCE(h.Data, t.Data), Depth + 1 AS Depth
  FROM Hierarchy h
       INNER JOIN Test t ON t.Id = h.ParentId
)
SELECT *
FROM Hierarchy
WHERE Id = 69
Run Code Online (Sandbox Code Playgroud)

查询#2 - 带参数

DECLARE @Id INT
SELECT @Id = 69

;WITH Hierarchy (Id, ParentId, Data, Depth)
AS
( SELECT Id, ParentId, NULL AS …
Run Code Online (Sandbox Code Playgroud)

sql where-clause sql-server-2008

11
推荐指数
1
解决办法
9311
查看次数

标签 统计

sql ×1

sql-server-2008 ×1

where-clause ×1