加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 在T-SQL中使用IF会削弱还是打破执行计划缓存?

发布时间:2020-12-12 16:57:39 所属栏目:MsSql教程 来源:网络整理
导读:有人建议我在t-SQL批处理中使用IF语句对性能有害.我正试图找到一些确认或验证这个断言.我正在使用SQL Server 2005和2008. 断言是以下批次: – IF @parameter = 0 BEGIN SELECT ... something ENDELSE BEGIN SELECT ... something else END SQL Server无法重
有人建议我在t-SQL批处理中使用IF语句对性能有害.我正试图找到一些确认或验证这个断言.我正在使用SQL Server 2005和2008.

断言是以下批次: –

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

ELSE
 BEGIN
  SELECT ... something else
 END

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

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

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

ELSE
 BEGIN
  SELECT ... something else
 END

哪里不可能事先确定将执行哪个分支?

解决方法

SQL Server通过忽略存储过程中的条件分支来优化存储过程的查询计划的编译过程.计划将基于第一次执行所使用的参数生成,如果分支的参数不同,这将导致问题.

我会将每个分支的SQL放入它们自己的存储过程中,以便生成的计划基于该分支的参数的实际使用情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读