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

sql – 何时使用WITH RECOMPILE选项的经验法则

发布时间:2020-12-12 16:41:20 所属栏目:MsSql教程 来源:网络整理
导读:我知道WITH RECOMPILE选项强制优化器重建存储过程的查询计划,但是什么时候想要这样做? 什么时候使用WITH RECOMPILE选项的时候有什么规则呢? 与每个sproc相关的有效开销是甚么? 解决方法 正如其他人所说,你不想在每个存储过程中简单地包括WITH RECOMPILE作
我知道WITH RECOMPILE选项强制优化器重建存储过程的查询计划,但是什么时候想要这样做?

什么时候使用WITH RECOMPILE选项的时候有什么规则呢?

与每个sproc相关的有效开销是甚么?

解决方法

正如其他人所说,你不想在每个存储过程中简单地包括WITH RECOMPILE作为习惯.通过这样做,您将消除存储过程的主要优点之一:保存查询计划的事实.

为什么这可能是一个大问题?计算查询计划比编译常规程序代码要好很多.由于SQL语句的语法仅指定了所需的内容,而不是(通常)如何获取它,这样可以在创建物理计划时使数据库具有广泛的灵活性(即,实际上分步指示收集和修改数据).数据库查询预处理器可以做的很多“技巧”和可以做出的选择 – 加入表的顺序,要使用的索引,是否在连接之前或之后应用WHERE子句等.

对于一个简单的SELECT语句,它可能没有什么不同,但对于任何非平凡的查询,数据库将花费一些严重的时间(以毫秒为单位,而不是通常的微秒)来制定一个最佳的计划.对于真正复杂的查询,它甚至不能保证一个最佳的计划,它只能使用启发式来制定一个很好的计划.所以通过强制它每次重新编译,你会告诉它必须经过一遍又一遍的过程,即使它以前的计划是非常好的.

根据供应商,应该有重新编译查询计划的自动触发器 – 例如,如果一个表上的统计信息发生了显着变化(例如,某个列中的值的直方图开始平均分布,随着时间的推移变得高度偏差) DB应该注意并重新编译计划.但是一般而言,数据库的实现者将比所有数据库更加智能.

与任何表演有关,不要在黑暗中拍摄;弄清楚瓶颈是否在90%的成本上,并首先解决.

(编辑:李大同)

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

    推荐文章
      热点阅读