Sql server DROPCLEANBUFFERS在SQL Server中不工作
我有一个正在尝试优化的存储过程。为了知道一次执行需要花费多少时间,我在脚本开头添加了:Sql server DROPCLEANBUFFERS在SQL Server中不工作,sql-server,Sql Server,我有一个正在尝试优化的存储过程。为了知道一次执行需要花费多少时间,我在脚本开头添加了: use MyDatabase go CHECKPOINT; GO DBCC DROPCLEANBUFFERS; GO 在两次执行之间,我可以看到运行查询的时间在减少。我以为只有缓存可以加快脚本的执行,SQL Server中是否有其他机制可以实现这一点 谢谢,第一次运行存储过程时,将计算并编译查询计划。这通常需要20毫秒,对于一个较长的过程来说可能会多一点 如果在检查点之前运行一次查询;dbcc缓冲区,
use MyDatabase
go
CHECKPOINT;
GO
DBCC DROPCLEANBUFFERS;
GO
在两次执行之间,我可以看到运行查询的时间在减少。我以为只有缓存可以加快脚本的执行,SQL Server中是否有其他机制可以实现这一点
谢谢,第一次运行存储过程时,将计算并编译查询计划。这通常需要20毫秒,对于一个较长的过程来说可能会多一点
如果在
检查点之前运行一次查询;dbcc缓冲区代码>,应该缓存该计划。也许您也在寻找?您还应该看看如何使用查询执行计划来优化查询,而不是每次更改时都破坏缓存。thx swasheck。我的问题更多的是关于sql server的内部结构。为了解释为什么没有缓存的完全相同的查询每次使用时都会更快。因为正如Andomar回答的那样,优化器也存储了计划,所以它不必重新编译计划-它只是从内存中提取计划。你的意思是:因为我已经运行过一次查询。下次运行它时,无论是否使用heckpoint;dbcc dropcleanbuffers;,查询计划已经计算和编译,因此sql server不会再次执行此操作?没有命令可以每次运行都重新计算和重新编译整个查询计划?啊,好的,告诉我swasheck。。好的,现在我明白了。谢谢你们两位!