所以我有一个在应用程序中速度很慢但在SSMS中速度很快,就像在Sommarskog's query plan mysteries article中一样。
查询是一个搜索,其中包含许多可能不同的参数。奇怪的是,当我重新索引时,它会在2秒内执行。然后我调用dbcc freeproccache,无论我多次执行sproc多少次,它都需要40秒。如果我再次重新索引,性能将恢复。如果我释放proc cachec,它会回到40秒。
如何在重新编制索引后立即执行并保留在缓存中以及应用程序可用的良好执行计划?
答案 0 :(得分:0)
可能是parameter sniffing问题。参数嗅探基本上是SQL Server,它使用您传入的第一组参数来确定将用于所有将来执行的执行计划。如果这些参数生成的执行计划适用于将要执行的所有各种条件,这可能会很好,但有时可能会出现问题。
检查此问题的一种快捷方法是使用RECOMPILE
query hint并查看可加快速度的文件。如果您决定采用这条路线,请确保在将其投入生产环境之前完全了解您所做的事情。