小编Ant*_*nes的帖子

在 T-SQL 中使用 IF 会削弱或破坏执行计划缓存吗?

有人向我建议,在 t-SQL 批处理中使用 IF 语句对性能有害。我试图找到一些确认或验证这个断言。我使用的是 SQL Server 2005 和 2008。

断言是以下批次:-

IF @parameter = 0
 BEGIN
  SELECT ... something
 END

ELSE
 BEGIN
  SELECT ... something else
 END
Run Code Online (Sandbox Code Playgroud)

SQL Server 无法重用生成的执行计划,因为下一次执行可能需要不同的分支。这意味着 SQL Server 将从执行计划中完全删除一个分支,因为它已经可以确定当前执行需要哪个分支。这是真的吗?

此外,在这种情况下会发生什么:-

IF EXISTS (SELECT ....)
 BEGIN
  SELECT ... something
 END

ELSE
 BEGIN
  SELECT ... something else
 END
Run Code Online (Sandbox Code Playgroud)

无法提前确定将执行哪个分支?

performance sql-server-2005 sql-server-2008 sql-server query-performance

20
推荐指数
3
解决办法
7422
查看次数