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

前端之家收集整理的这篇文章主要介绍了sql-server – 在T-SQL中使用IF会削弱还是打破执行计划缓存?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有人建议我在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放入它们自己的存储过程中,以便生成的计划基于该分支的参数的实际使用情况.

猜你在找的MsSQL相关文章