Ich habe eine Tabelle mit mehreren Millionen Zeilen, aus der ich von Zeit zu Zeit einige Abfragen ausführen muss. Die erste Abfrage ist normalerweise ziemlich langsam (ungefähr 10 Sekunden), und nachfolgende Abfragen sind normalerweise viel schneller (ungefähr 1 Sekunde). Nach einigen Stunden beginnt wieder ein langsamer / dann schneller Zyklus.
Ich habe in meinem Ausführungsplan überprüft, ob alle erforderlichen Indizes vorhanden waren und ordnungsgemäß verwendet wurden, und ich gehe davon aus, dass der Leistungsunterschied auf die Tatsache zurückzuführen ist, dass sich der Index für die nachfolgenden Abfragen tatsächlich im Speicher befindet (habe ich Recht oder gibt es andere mögliche Ursachen?)
Ich führe auch viele andere Abfragen mit Indizes aus, aber diese Abfragen sind weniger zeitaufwändig und ihre Leistung ist weniger kritisch. Daher befürchte ich, dass diese Indizes meinen kritischen Index tatsächlich aus dem Speichercache verschieben.
Abgesehen von dem offensichtlichen Fix "Mehr RAM hinzufügen" habe ich darüber nachgedacht, Dummy-Abfragen zu schreiben, die jede Stunde ausgeführt werden, um den Index wieder in den Speicher zu zwingen.
Gibt es eine elegantere Möglichkeit, dies zu tun? Wie ein Hinweis darauf, dass SQLServer, wenn er nur über genügend Speicher verfügt, um einen einzelnen Index zwischengespeichert zu halten, dieser sein sollte?
Ich weiß, dass es normalerweise am besten ist, SQLServer in Bezug auf diese Art von Dingen nicht durcheinander zu bringen, aber die ungewöhnliche Art meiner Abfrage (die sehr selten, aber zeitkritisch ausgeführt wird) lässt mich glauben, dass sie (wenn möglich) sinnvoll wäre. .
Ich bin auch neugierig zu wissen, ob es eine Möglichkeit gibt zu wissen, welche Indizes zu einem bestimmten Zeitpunkt im Speicher zwischengespeichert werden.