我在 SQL Server 数据库上有这个存储过程,用于更新静态数据。它有 40,000 个表插入/更新。它没有参数。
如果我在 SQL Server Management Studio (SSMS) 中执行存储过程,则运行时间将超过 15 分钟。但是,如果我直接运行其脚本内容,则需要 1 分钟!
我尝试过以下方法: 选项(重新编译) 更新统计数据 DBCC FREEPROCCACHE;
这可能会因您进行测试的方式而异。
SQL Server 会缓存已编译的查询执行计划,因此对于包含大量语句的复杂过程,如果您先测试该过程,然后紧接着在该过程之外测试完全相同的语句,SQL Server 将检测查询是否已缓存并保存编译步骤。这不太可能有 14 分钟的差异,但值得记住。
此外,SQL Server 会将最近使用的表和索引缓存在内存中。因此,如果您先冷运行该过程,然后尝试运行紧随其后的语句,则可能会削减大量磁盘 I/O(无论哪个发生在另一个之后)。这可以解释 14 分钟的差异。