【问题标题】:Should I recompile a table after I drop an Index?删除索引后是否应该重新编译表?
【发布时间】:2014-12-10 13:21:48
【问题描述】:

我正在删除一些未使用的索引。

我通常做的是:

  1. 确保统计信息已更新 - 可能由于一段时间未更新统计信息,该索引尚未使用

  2. 为涉及的每个索引生成删除索引脚本和创建索引脚本

  3. 运行删除索引命令

  4. update statistics tablename -- 以便更新用于生存的表索引的统计信息

  5. sp_recompile 'tablename' 索引所在的位置

问题:我真的需要进行 sp_recompile 吗? 有什么建议吗?

http://msdn.microsoft.com/en-us/library/ms181647.aspx

【问题讨论】:

    标签: sql-server sql-server-2008 sql-server-2008-r2 indexing sql-server-2012


    【解决方案1】:

    删除/重建索引将导致使用此表/索引视图的任何缓存执行计划无效。 sql server 会在下次执行时生成一个新的执行计划。

    统计数据也是如此,更新统计数据将导致任何缓存的执行计划失效。 sql server 会在下次执行时生成一个新的执行计划。

    没有任何理由明确告诉 sql server 使用该对象(表、视图等)重新编译执行计划。

    【讨论】:

    • sp_recompile 不执行对象本身的重新编译。它只删除所有保存的执行计划。这会通过对象的下一次调用(使用下一次调用的参数)强制重新编译。
    • 这与重建索引或刷新统计信息时发生的情况相同
    猜你喜欢
    • 1970-01-01
    • 2011-06-21
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 2016-02-22
    • 2018-07-13
    相关资源
    最近更新 更多