Detailnya bergantung pada implementasi tetapi umumnya berbicara, hasil buffer. Menjalankan kueri terhadap database akan mengembalikan beberapa kumpulan hasil. Jika cukup kecil, semua hasil dapat dikembalikan dengan panggilan awal atau beberapa mungkin dan lebih banyak hasil dikembalikan saat Anda mengulangi objek hasil.
Pikirkan urutannya seperti ini:
- Anda membuka koneksi ke database;
- Mungkin ada panggilan kedua untuk memilih database atau mungkin dilakukan sebagai bagian dari (1);
- Langkah otentikasi dan koneksi itu (setidaknya) satu kali perjalanan ke server (mengabaikan koneksi persisten);
- Anda menjalankan kueri pada klien;
- Kueri itu dikirim ke server;
- Server harus menentukan cara mengeksekusi kueri;
- Jika server sebelumnya telah mengeksekusi kueri, rencana eksekusi mungkin masih ada dalam cache kueri. Jika tidak, rencana baru harus dibuat;
- Server mengeksekusi kueri seperti yang diberikan dan mengembalikan hasilnya ke klien;
- Hasil itu akan berisi beberapa buffer baris yang bergantung pada implementasi. Mungkin 100 baris atau lebih atau kurang. Semua kolom dikembalikan untuk setiap baris;
- Saat Anda mengambil lebih banyak baris, akhirnya klien akan meminta server untuk lebih banyak baris. Ini mungkin ketika klien habis atau mungkin dilakukan secara preemptive. Sekali lagi ini bergantung pada implementasi.
Ide dari semua ini adalah untuk meminimalkan bolak-balik ke server tanpa mengirim kembali terlalu banyak data yang tidak perlu, itulah sebabnya jika Anda meminta satu juta baris, Anda tidak akan mendapatkan semuanya sekaligus.
LIMIT klausa--atau klausa apa pun sebenarnya--akan mengubah kumpulan hasil.
Terakhir, (7) penting karena SELECT * FROM table WHERE a = 'foo'
dan SELECT * FROM table WHERE a = 'bar'
adalah dua kueri yang berbeda sejauh menyangkut pengoptimal basis data sehingga rencana eksekusi harus ditentukan untuk masing-masing secara terpisah. Tetapi kueri berparameter (SELECT * FROM table WHERE a = :param
) dengan parameter yang berbeda adalah satu kueri dan hanya perlu direncanakan satu kali (setidaknya sampai keluar dari cache kueri).