我可以运行一个存储过程多次,它不会打它的缓存:(1665ms的持续时间列)SQL Server性能快,只有当刷新存储过程
但是,如果我再改变存储程序变着法子:(240毫秒时间是列)
问题:如何让存储过程总是要快(在第二个及以后的调用)
我可以运行一个存储过程多次,它不会打它的缓存:(1665ms的持续时间列)SQL Server性能快,只有当刷新存储过程
但是,如果我再改变存储程序变着法子:(240毫秒时间是列)
问题:如何让存储过程总是要快(在第二个及以后的调用)
随着一些挖我发现,当我用NULL称为SP最初(重新启动后)的applicationID
exec [dbo].[usp_Tab32] @responsibleReviewerID=1135,@applicationID=NULL,@environment=1,@userUIStatus=0,@roleID=NULL
然后用较局限的查询:
EXEC [DBO] [usp_Tab32 ] @ responsibleReviewerID = 1135,@ applicationID = 1406,@ environment = 1,@ userUIStatus = 0,@ roleID = NULL
这样会很慢。
但是,如果我首先遇到更多限制的查询,那么两者都会很快。
要清除关闭数据库计划缓存:
DECLARE @dbId INTEGER
SELECT @dbId = dbid FROM master.dbo.sysdatabases WHERE name = ‘myDatabase’
DBCC FLUSHPROCINDB (@dbId)
更多细节here
所有针对SQL2012开发版。
与RECOMPILE创建存储过程,并在运行时编译
然后调用它以这样的方式
EXEC yourprodecurename WITH RECOMPILE
这应该给你你想要的体验,因为,当一个程序首次编译或重新编译时,过程查询计划针对数据库的当前状态进行了优化。
所以这可以提高程序的处理性能。
非常感谢yeradis。在我的情况下,我发现这降低了性能。 –
值得看看这个:http://www.sommarskog.se/query-plan-mysteries.html特别是OPTIMIZE FOR提示。清理整个计划缓存并不理想,所以如果您可以使用提示,它可以帮助您在繁忙的系统上工作。 – Meff
谢谢梅夫 - 是的同意! –