我有一个存储过程,它为业务仪表板返回大量数据。第一次加载需要 18 秒,之后需要 0 秒,即使我随机更改输入参数,它也会保持在 0 秒并返回正确的结果。
如果我等了大约三分钟,它会回到 18 秒。这对用户来说是不可接受的,我已经用尽了我知道的每一个选项。
为什么在第一次加载时会很慢,但之后会很快?我知道它可能正在重新编译执行计划,因此在我添加的每个查询中都添加了 OPTION (KEEP PLAN);没有效果。我的存储过程没有'with recompile'。我下载了“datawizard sql profiler”并设置了一个跟踪以显示重新编译,但它没有显示任何内容,即使我在查询中使用了“with recompile”。
我唯一的其他想法是 mssql 正在执行某种结果缓存,但即使我更改参数,查询也运行得很快。
为什么我等了一会儿又需要 18 秒,然后是 0,然后又是 18 秒?