Sau*_*mar 7 sql sql-server optimization
我有两个SQL查询,每个查询大约2-3个INNER JOINS.我需要在他们之间做一个INTERSECT.
问题是,个人查询工作速度很快,但在交叉后总共花费大约4秒.
现在,如果我在整个查询的末尾放置一个OPTION(RECOMPILE),那么查询工作得非常好,几乎可以立即快速返回!
我理解选项recopile强制重建执行计划,所以如果我的管理员查询需要4秒钟更好或者现在重新编译,我会感到困惑,但是花0秒更好.
指定了WITH RECOMPILE SQL Server不会为此存储过程缓存计划,每次执行存储过程时都会重新编译存储过程.
每当第一次在SQL Server中运行存储过程时,它都会进行优化,并在SQL Server的内存中编译和缓存查询计划.每次在缓存后运行相同的存储过程时,它将使用相同的查询计划,从而无需在每次运行时优化和编译相同的存储过程.因此,如果您需要每天运行1000次相同的存储过程,则可以节省大量时间和硬件资源,并且SQL Server不必像以前那样努力工作.
您不应该使用此选项,因为通过使用此选项,您将失去通过使用存储过程替换SQL查询所获得的大部分优势.
而不是回答你问的问题,这是你应该做的:
更新统计信息:
EXEC sp_updatestats
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,请重建索引.
如果这不起作用,请查看OPTIMIZE FOR
| 归档时间: |
|
| 查看次数: |
12215 次 |
| 最近记录: |