Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

OPSI (REKOMPILASI) Selalu Lebih Cepat; Mengapa?

Ada kalanya menggunakan OPTION(RECOMPILE) masuk akal. Dalam pengalaman saya, satu-satunya saat ini adalah opsi yang layak adalah ketika Anda menggunakan SQL dinamis. Sebelum Anda menjelajahi apakah ini masuk akal dalam situasi Anda, saya akan merekomendasikan membangun kembali statistik Anda. Ini dapat dilakukan dengan menjalankan yang berikut:

EXEC sp_updatestats

Dan kemudian membuat ulang rencana eksekusi Anda. Ini akan memastikan bahwa ketika rencana eksekusi Anda dibuat, itu akan menggunakan informasi terbaru.

Menambahkan OPTION(RECOMPILE) membangun kembali rencana eksekusi setiap kali kueri Anda dieksekusi. Saya belum pernah mendengar yang dijelaskan sebagai creates a new lookup strategy tapi mungkin kita hanya menggunakan istilah yang berbeda untuk hal yang sama.

Ketika prosedur tersimpan dibuat (saya menduga Anda memanggil ad-hoc sql dari .NET tetapi jika Anda menggunakan kueri berparameter maka ini akhirnya menjadi panggilan proc tersimpan) SQL Server mencoba menentukan rencana eksekusi yang paling efektif untuk kueri ini berdasarkan data dalam database Anda dan parameter yang diteruskan (pengendus parameter), dan kemudian menyimpan rencana ini dalam cache. Ini berarti bahwa jika Anda membuat kueri di mana terdapat 10 catatan dalam database Anda dan kemudian menjalankannya ketika ada 100.000.000 catatan, rencana eksekusi yang di-cache mungkin tidak lagi menjadi yang paling efektif.

Singkatnya - Saya tidak melihat alasan apa pun bahwa OPTION(RECOMPILE) akan menjadi keuntungan di sini. Saya kira Anda hanya perlu memperbarui statistik dan rencana eksekusi Anda. Membangun kembali statistik dapat menjadi bagian penting dari pekerjaan DBA tergantung pada situasi Anda. Jika Anda masih mengalami masalah setelah memperbarui statistik Anda, saya sarankan untuk memposting kedua rencana eksekusi.

Dan untuk menjawab pertanyaan Anda - ya, menurut saya, sangat tidak biasa bagi opsi terbaik Anda untuk mengkompilasi ulang rencana eksekusi setiap kali Anda menjalankan kueri.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Berbagai cara untuk menggunakan fungsi tanggal SQL CONVERT

  2. Mencari Objek Database dan Data Tabel di SQL Server

  3. Menyimpan data UTF-16/Unicode di SQL Server

  4. Bagaimana cara mengatur nama tabel dalam kueri SQL dinamis?

  5. Apakah ada cara untuk mengakses nilai baris sebelumnya dalam pernyataan SELECT?