1

我看不出执行计划有什么问题。此外,据我了解,SQL Server 2000 通过识别针对现有执行计划的 T-SQL 语句的新 T-SQL 语句(通过保留所有 SQL 语句的执行计划),将存储过程的许多性能优势扩展到所有 SQL 语句。过程缓存,而不仅仅是存储过程执行计划)

这是一个相当直接的 SELECT 语句,具有合理的表连接,查询中不包含任何事务或链接的服务器被引用,并且应用了 WITH (NOLOCK) 表提示。存储过程由 dbo 创建,用户拥有所有必要的权限。

所以我的问题是:

当通过存储过程运行相同的 T-SQL 时,查询只需要几秒钟即可运行但随后需要几分钟的可能原因是什么?

4

1 回答 1

2

可以想到两个可能的原因:

  • 存储过程可能正在使用过时的执行计划。如果删除并重新创建存储过程,将重新编译其执行计划。
  • 存储过程针对一般情况进行了优化。如果您使用特定值执行查询,SQL Server 可能会为这些值找到更好的执行计划。如果是这种情况,添加OPTION (OPTIMIZE FOR UNKNOWN)到非程序版本应该会使其变慢。
于 2010-04-14T22:51:27.317 回答