我有一个包含几百万行的表,我需要不时地从中运行一些查询。第一次查询通常会很慢(大约10s),而后续查询通常会更快(大约1s)。几个小时后,缓慢/快速循环又开始了。
我已经在执行计划中检查了所有需要的索引均已存在并已正确使用,并且我认为性能差异是由于该索引实际上位于后续查询的内存中(我是对的,还是其他?可能的原因?)
我还使用索引来运行许多其他查询,但是这些查询耗时较少,其性能也不太关键,因此我担心那些索引实际上会将关键索引从内存缓存中推出。
除了明显的“添加更多RAM”修复程序之外,我还一直在考虑编写脚本脚本以每小时运行一次以将索引强制返回内存。
有没有更优雅的方法可以做到这一点?就像一种提示SQLServer的方法一样,如果它只有足够的内存来保持单个索引的高速缓存,那它应该是那个?
我知道通常最好的办法是不要将SQLServer与这类事情搞混,但是我查询的异常性质(运行很少,但是时间紧迫)使我相信这样做(如果可能) 。
我也很好奇,是否有办法知道给定时间在内存中缓存了哪些索引?