Saya punya meja dengan jutaan baris, dari mana saya perlu menjalankan beberapa query dari waktu ke waktu. Kueri pertama biasanya akan sangat lambat (sekitar 10 detik), dan kueri berikutnya biasanya lebih cepat (sekitar 1 detik). Setelah beberapa jam, siklus lambat / kemudian cepat dimulai lagi.
Saya telah memeriksa dalam rencana pelaksanaan saya bahwa semua indeks yang diperlukan ada dan digunakan dengan tepat, dan saya berasumsi perbedaan kinerja disebabkan oleh fakta bahwa indeks tersebut sebenarnya ada dalam memori untuk pertanyaan selanjutnya (apakah saya benar, atau adakah yang lain kemungkinan penyebab?)
Saya juga menjalankan banyak kueri lain menggunakan indeks juga, tetapi kueri itu kurang memakan waktu dan kinerjanya kurang kritis, jadi saya khawatir indeks itu sebenarnya mendorong indeks kritis saya keluar dari cache memori.
Terlepas dari perbaikan 'tambah lebih banyak RAM' yang jelas, saya telah memikirkan skrip query dummy untuk dijalankan setiap jam untuk memaksa indeks kembali ke memori.
Apakah ada cara yang lebih elegan untuk melakukan ini? Seperti cara untuk mengisyaratkan SQLServer bahwa jika hanya memiliki memori yang cukup untuk menyimpan satu indeks tunggal di-cache, haruskah itu?
Saya tahu bahwa biasanya hal terbaik adalah tidak mengacaukan SQLServer sehubungan dengan hal-hal semacam itu, tetapi sifat yang tidak biasa dari permintaan saya (berjalan sangat jarang, tetapi waktu-kritis) membuat saya percaya itu masuk akal (jika mungkin) .
Saya juga ingin tahu apakah ada cara untuk mengetahui indeks mana yang di-cache dalam memori pada waktu tertentu?