我想知道你们是否可以帮我解决我最近在SQL Server上遇到的一个奇怪问题.
我有一个存储过程(让我们调用SPold)相当大,有很多计算(不能在应用程序中执行此操作,因为大约6000个用户的信息需要一次性返回(我将此值减少到1000)姓)).存储过程通常在几秒钟内执行,并且每隔几分钟调用一次.
现在今天早上,存储过程突然执行了4-10倍,导致了一些超时.我发现通过使用新名称(SPnew)执行该过程的副本并执行,我将再次获得快速执行时间.这告诉我执行计划是原始的问题SPold,所以我决定通过重新编译来执行它.这样可以更快地返回结果(虽然没有那么快SPnew),但用户的后续调用SPold再次变慢.这就好像没有保留新计划.
我所做的就是解决这个问题放Exec SPnew成SPold,现在调用SPold正在迅速再次返回.
有谁知道这里发生了什么?那一夜更新的唯一的事就是统计数据,但我认为这应该不会影响这两个SPold和SPnew.
sql-server stored-procedures sql-server-2005 sql-execution-plan