重新编译执行计划

当数据库发生特定变化,如表结构、索引或统计信息更新时,SQL Server会标记执行计划无效,需要重新编译。SQL Server 2005开始支持语句级重新编译,提高了性能,减少了不必要的损失。SQL Server Profiler的SP:Recompile和SQL:StmtRecompile事件用于追踪和调试重新编译原因。
摘要由CSDN通过智能技术生成

根据数据库新状态的不同,数据库中的某些更改可能导致执行计划效率降低或无效。SQL Server 将检测到使执行计划无效的更改,并将计划标记为无效。此后,必须为执行查询的下一个连接重新编译新的计划。导致计划无效的情况包括:

  1. 对查询所引用的表或视图进行更改(ALTER TABLE 和 ALTER VIEW)。
  2. 对执行计划所使用的任何索引进行更改。
  3. 对执行计划所使用的统计信息进行更新,该更新可能是从语句(如 UPDATE STATISTICS)中显示生成,也可能是自动生成的。
  4. 删除执行计划所使用的索引。
  5. 显式调用 sp_recompile
  6. 对键的大量更改(其他用户对由查询引用的表使用 INSERT 或 DELETE 语句所产生的修改)。
  7. 对于带触发器的表,插入的删除的表内的行数显著增长。
  8. 使用 WITH RECOMPILE 选项执行存储过程。

为了使语句正确,或要获得可能更快的查询执行计划,大多数都需要进行重新编译。

在 SQL Server 2000 中,只要批处理中的语句导致重新编译,就会重新编译整个批处理,无论此批处理是通过存储过程、触发器、即席批查询,还是通过预定义的语句进行提交。在 SQL Server 2005 中,只有在批处理中导致重新编译的语句才会被重新编译。由于这种差异,SQL Server 2000 和 SQL Server 2005 中的重新编译计数不可比较。另外,由于 SQL Server 2005 扩展了功能集,因此,具有更多重新编译类型。

语句级重新编译有助于提高性能,因为在大多数情况下ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值