Penembolokan Rencana Kueri (Entity SQL)

Setiap kali upaya untuk mengeksekusi kueri dilakukan, alur kueri mencari cache rencana kuerinya untuk melihat apakah kueri yang tepat sudah dikompilasi dan tersedia. Jika demikian, ini menggunakan kembali rencana cache, bukan membuat yang baru. Jika kecocokan tidak ditemukan di cache rencana kueri, kueri dikompilasi dan di-cache. Kueri diidentifikasi oleh kumpulan teks dan parameter Entity SQL-nya (nama dan jenis). Semua perbandingan teks peka huruf besar/kecil.

Konfigurasi

Penembolokan rencana kueri dapat dikonfigurasi melalui EntityCommand.

Untuk mengaktifkan atau menonaktifkan penembolokan rencana kueri melalui EntityCommand.EnablePlanCaching, atur properti ini ke true atau false. Menonaktifkan penembolokan rencana untuk kueri dinamis individual yang tidak mungkin digunakan lebih dari sekali dapat meningkatkan performa.

Anda dapat mengaktifkan penembolokan rencana kueri melalui EnablePlanCaching.

Kueri dinamis umumnya harus dihindari. Contoh kueri dinamis berikut rentan terhadap serangan injeksi SQL, karena mengambil input pengguna secara langsung tanpa validasi apa pun.

var query = "SELECT sp.SalesYTD FROM AdventureWorksEntities.SalesPerson as sp WHERE sp.EmployeeID = " + employeeTextBox.Text;

Jika Anda menggunakan kueri yang dihasilkan secara dinamis, pertimbangkan untuk menonaktifkan penembolokan rencana kueri untuk menghindari konsumsi memori yang tidak perlu untuk entri cache yang tidak mungkin digunakan kembali.

Penembolokan rencana kueri pada kueri statik dan kueri parameter dapat memberikan manfaat performa. Berikut contoh kueri statik:

var query = "SELECT sp.SalesYTD FROM AdventureWorksEntities.SalesPerson as sp";

Agar kueri dicocokkan dengan benar oleh cache rencana kueri, kueri harus mematuhi persyaratan berikut:

  • Teks kueri harus menjadi pola konstan, lebih disukai string konstan atau sumber daya.

  • EntityParameter atau ObjectParameter harus digunakan di mana pun nilai yang disediakan pengguna harus diteruskan.

Anda harus menghindari pola kueri berikut, yang tidak perlu mengonsumsi slot dalam cache rencana kueri:

  • Perubahan pada kasus huruf dalam teks.

  • Perubahan pada spasi putih.

  • Perubahan pada nilai literal.

  • Perubahan pada teks di dalam komentar.

Lihat juga