【问题标题】:Recompile an Altered Table重新编译变更表
【发布时间】:2021-12-07 15:32:59
【问题描述】:

我们有一个包含超过 2000 万条记录和超过 50 列的表。我最近添加了一个类型为bit 的新列。完成更改后,使用此表的一些存储过程性能不佳。 DBA 要求我运行 SP_Recompile 'tableName' 命令来更新表统计信息。在我这样做之后,程序运行良好。有人可以解释一下更改表并添加新列时会发生什么吗?它对性能有何影响?

【问题讨论】:

    标签: sql sql-server tsql ssis msbi


    【解决方案1】:

    这其实在documentation里有解释。

    首先,sys.sp_recompile N'{Table Name}'; 不会更新表的统计信息。来自文档:

    如果 object 是表或视图的名称,则所有引用表或视图的存储过程、触发器或用户定义函数将在下次运行时重新编译。

    重新编译是指下次重新生成该查询的查询计划;不使用旧的缓存。文档中还讨论了您为什么要这样做:

    存储过程、触发器和用户定义函数使用的查询仅在编译时才进行优化。由于对数据库进行影响统计的索引或其他更改,编译的存储过程、触发器和用户定义的函数可能会降低效率。通过重新编译作用于表的存储过程和触发器,您可以重新优化查询。

    当您更改表时,您可能会影响统计信息。但是,也只是在日常使用中插入、更新和删除行。看来这里就是这种情况,程序使用的计划现在并不是最有效的。强制他们重新编译意味着他们可以使用新的统计数据和新的(希望更有效的)计划。

    【讨论】:

    • 非常感谢拉努!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    相关资源
    最近更新 更多