수백만 개의 행이있는 테이블이 있는데 때때로 쿼리를 실행해야합니다. 첫 번째 쿼리는 일반적으로 매우 느리고 (약 10 초), 후속 쿼리는 일반적으로 더 빠릅니다 (약 1 초). 몇 시간 후에 느리고 빠른 사이클이 다시 시작됩니다.
실행 계획에서 필요한 모든 인덱스가 존재하고 적절하게 사용되었는지 확인했으며 성능 차이는 인덱스가 실제로 후속 쿼리를 위해 메모리에 있다는 사실 때문이라고 가정합니다. 가능한 원인들?)
또한 인덱스를 사용하여 다른 많은 쿼리를 실행하고 있지만 이러한 쿼리는 시간이 덜 걸리고 성능이 덜 중요하므로 인덱스가 실제로 중요한 인덱스를 메모리 캐시에서 밀어내는 것이 걱정됩니다.
명백한 'Add more RAM'픽스와는 별도로, 인덱스를 메모리에 다시 강제로 매시간 실행하도록 더미 쿼리 스크립팅에 대해 생각하고 있습니다.
더 우아한 방법이 있습니까? 하나의 단일 인덱스를 캐시로 유지하기에 충분한 메모리 만있는 경우 SQLServer에 힌트를주는 방법과 같습니다.
나는 일반적으로 최선의 방법은 그러한 종류의 것들과 관련하여 SQLServer를 엉망으로 만드는 것이 아니라 내 쿼리의 특이한 특성 (매우 드물게 실행되지만 시간이 중요한)은 그것이 가능할 것이라고 생각하게 만드는 것입니다. .
또한 주어진 시간에 어떤 인덱스가 메모리에 캐시되는지 알 수있는 방법이 있는지 궁금합니다.