我有一个包含数百万行的表,我需要不时从中运行一些查询。第一个查询通常会很慢(大约 10 秒),随后的查询通常会更快(大约 1 秒)。几个小时后,一个缓慢/然后快速的循环再次开始。
我已经在我的执行计划中检查了所有需要的索引都存在并得到了适当的使用,我认为性能差异是由于索引实际上在内存中用于后续查询(我是对的,还是有其他可能的原因?)
我还使用索引运行了许多其他查询,但这些查询耗时较少,性能也不那么重要,所以我担心这些索引实际上是将我的关键索引从内存缓存中推出。
除了明显的“添加更多 RAM”修复之外,我一直在考虑编写虚拟查询脚本,使其每小时运行一次,以强制索引返回内存。
有没有更优雅的方法来做到这一点?就像暗示 SQLServer 的一种方式,如果它只有足够的内存来保持一个索引缓存,它应该是那个?
我知道通常最好的办法是不要在这类事情上搞砸 SQLServer,但是我的查询的不寻常性质(很少运行,但对时间要求严格)让我相信它是有意义的(如果可能的话) .
我也很想知道是否有办法知道在给定时间哪些索引缓存在内存中?