Ho una tabella con diversi milioni di righe, da cui ho bisogno di eseguire alcune query di volta in volta. La prima query sarà in genere piuttosto lenta (circa 10 secondi) e le query successive sono in genere molto più veloci (circa 1 secondo). Dopo alcune ore, ricomincia un ciclo lento / poi veloce.
Ho verificato nel mio piano di esecuzione che tutti gli indici necessari erano presenti e utilizzati in modo appropriato e presumo che la differenza di prestazioni sia dovuta al fatto che l'indice è effettivamente in memoria per le query successive (ho ragione o ci sono altri cause possibili?)
Sto anche eseguendo molte altre query utilizzando anche gli indici, ma quelle query richiedono meno tempo e le loro prestazioni sono meno critiche, quindi sono preoccupato che quegli indici stiano effettivamente spingendo il mio indice critico fuori dalla cache della memoria.
A parte l'ovvia correzione "aggiungi più RAM", ho pensato di eseguire lo script di query fittizie da eseguire ogni ora per forzare l'indice in memoria.
C'è un modo più elegante per farlo? Come un modo per suggerire a SQL Server che se ha memoria sufficiente per mantenere nella cache un singolo indice, dovrebbe essere quello?
So che di solito la cosa migliore non è incasinare quale SQL Server per quel tipo di cose, ma l'insolita natura della mia query (viene eseguita molto raramente, ma critica nel tempo) mi fa credere che avrebbe senso (se possibile) .
Sono anche curioso di sapere se esiste un modo per sapere quali indici sono memorizzati nella cache in un determinato momento?