回答

收藏

SQL Server-条件语句的查询执行计划

技术问答 技术问答 246 人阅读 | 0 人回复 | 2023-09-12

条件句(如 IF … ELSE    )如何影响SQL Server查询执行计划(2005及更高版本)?
% O  R' y; N) W- s1 z, A条件句会导致执行计划不佳吗?在考虑性能时,是否需要警惕任何形式的条件句?# j! ?* d7 G' x1 D7 |' S. ~, \& c
编辑添加4 {" E, G6 b) c/ [: B4 W
我特别指的是缓存查询执行计划。例如,在以下实例中缓存查询执行计划时,是否为条件查询的每个结果缓存了两个执行计划?
# I6 E9 L4 @/ Q' ZDECLARE @condition BITIF @condition = 1BEGIN    SELECT * from ...ENDELSEBEGIN    SELECT * from ..END               
- |+ j# p1 ~& s$ Y+ }* e    解决方案:                                                               
. w" Y5 d. p, S' u+ E                                                                如果你使用这种方法,你经常会得到计划的重新编译。我通常试图把它们分开,所以你最终会得到:
  G% g) N3 q6 eDECLARE @condition BITIF @condition = 1 BEGIN  EXEC MyProc1END ELSE BEGIN  EXEC MyProc2END这样,用户最终就不会有任何区别,MyProc1和2将获得自己的缓存执行计划。一个过程,一个查询。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则