Saat Anda melakukan kueri, data dibaca ke dalam memori dalam blok. Blok-blok ini tetap ada dalam memori tetapi mereka menjadi "tua". Ini berarti blok ditandai dengan akses terakhir dan ketika Sql Server membutuhkan blok lain untuk kueri baru dan cache memori penuh, blok yang paling terakhir digunakan (terlama) dikeluarkan dari memori. (Dalam kebanyakan kasus - blok pemindaian tabel penuh langsung menua untuk mencegah pemindaian tabel penuh menguasai memori dan mencekik server).
Apa yang terjadi di sini adalah bahwa blok data dalam memori dari kueri pertama belum dikeluarkan dari memori sehingga dapat digunakan untuk kueri kedua Anda, artinya akses disk dihindari dan kinerja ditingkatkan.
Jadi yang sebenarnya ditanyakan oleh pertanyaan Anda adalah "dapatkah saya memasukkan blok data yang saya butuhkan ke dalam memori tanpa membacanya ke dalam memori (sebenarnya melakukan kueri)?". Jawabannya tidak, kecuali jika Anda ingin men-cache seluruh tabel dan menyimpannya di memori secara permanen yang, dari waktu kueri (dan dengan demikian ukuran data) yang Anda gambarkan, mungkin bukan ide yang baik.
Taruhan terbaik Anda untuk peningkatan kinerja adalah melihat rencana eksekusi kueri Anda dan melihat apakah mengubah indeks Anda dapat memberikan hasil yang lebih baik. Ada dua area utama yang dapat meningkatkan kinerja di sini:
- membuat indeks tempat kueri dapat menggunakannya untuk menghindari kueri yang tidak efisien dan pemindaian tabel penuh
- menambahkan lebih banyak kolom ke indeks untuk menghindari pembacaan disk kedua. Misalnya, Anda memiliki kueri yang mengembalikan kolom A, dan B dengan klausa where pada A dan C dan Anda memiliki indeks pada kolom A. Kueri Anda akan menggunakan indeks untuk kolom A yang memerlukan satu disk dibaca tetapi kemudian memerlukan disk kedua tekan untuk mendapatkan kolom B dan C. Jika indeks memiliki semua kolom A, B dan C di dalamnya, klik disk kedua untuk mendapatkan data dapat dihindari.