SQL Server pada dasarnya melalui langkah-langkah ini untuk menjalankan apa saja query (panggilan prosedur tersimpan atau pernyataan SQL ad-hoc):
1) secara sintaksis memeriksa kueri
2) jika tidak apa-apa - ia memeriksa cache rencana untuk melihat apakah sudah memiliki rencana eksekusi untuk kueri itu
3) jika ada rencana eksekusi - rencana itu adalah ( digunakan kembali dan kueri dieksekusi
4) jika belum ada rencana, rencana eksekusi ditentukan
5) rencana tersebut disimpan ke dalam cache rencana untuk digunakan kembali nanti
6) kueri dieksekusi
Intinya adalah:SQL ad-hoc dan prosedur tersimpan diperlakukan tidak berbeda .
Jika kueri SQL ad-hoc menggunakan parameter dengan benar - sebagaimana mestinya, untuk mencegah serangan injeksi SQL - karakteristik kinerjanya tidak berbeda dan yang pasti tidak lebih buruk daripada menjalankan prosedur tersimpan.
Prosedur tersimpan memiliki manfaat lain (misalnya, tidak perlu memberi pengguna akses tabel langsung), tetapi dalam hal kinerja, menggunakan kueri SQL ad-hoc yang diparametrikan dengan benar sama efisiennya seperti menggunakan prosedur tersimpan.
Pembaruan: menggunakan prosedur tersimpan di atas non-parametris kueri lebih baik karena dua alasan utama:
-
karena setiap kueri yang tidak berparameter adalah baru, berbeda query ke SQL Server, itu harus melalui semua langkah untuk menentukan rencana eksekusi, untuk setiap permintaan (sehingga membuang-buang waktu - dan juga membuang-buang ruang cache rencana, karena menyimpan rencana eksekusi ke dalam cache rencana tidak terlalu membantu pada akhirnya , karena kueri tertentu itu mungkin tidak dieksekusi lagi)
-
kueri non-parametri berisiko terkena serangan injeksi SQL dan harus dihindari bagaimanapun caranya