sql-server – SQL Server:为什么需要重新编译存储过程?

我正在执行我在 this site上找到的脚本来标记我的所有表和存储过程以进行重新编译.
(我将其更改为也标记存储过程)

我有一个Windows Forms(.net 3.5)应用程序,它使用了大量数据表,在执行此脚本后,打开数据繁重表单所花费的时间从8秒变为仅4秒.

我必须定期运行这样的脚本吗?我以为sql Server会负责编译程序等.

顺便说一句:这个问题应该是吗?我以为DBA会在SF上.

解决方法

Microsoft开始:

“由于通过添加索引或更改索引列中的数据等操作更改了数据库,因此应通过重新编译来再次优化用于访问其表的原始查询计划.此优化在Microsoft之后第一次运行存储过程时自动执行sql Server重新启动.如果存储过程使用的基础表发生更改,也会发生这种情况.但是如果添加一个新索引,存储过程可能会从中受益,则优化不会发生,直到下次在Microsoft sql之后运行存储过程服务器重新启动.在这种情况下,强制存储过程在下次执行时重新编译会很有用

强制存储过程重新编译的另一个原因是在必要时抵消存储过程编译的“参数嗅探”行为.当sql Server执行存储过程时,过程在编译时使用的任何参数值都包含在生成查询计划的过程中.如果这些值表示随后调用过程的典型值,则每次编译和执行时,存储过程都会从查询计划中受益.如果没有,表现可能会受到影响.“

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...