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

Waktu Query SQL Server habis tergantung pada Where Clause

Masalah yang Anda alami adalah (hampir pasti) karena rencana kueri yang di-cache, yang sesuai untuk beberapa versi parameter yang diteruskan ke kueri, tetapi tidak untuk yang lain (alias Parameter Sniffing).

Ini adalah kejadian umum, dan sering diperparah oleh statistik yang ketinggalan zaman dan/atau indeks yang sangat terfragmentasi.

Langkah pertama :pastikan Anda telah membangun kembali semua indeks Anda dan bahwa statistik pada kolom yang tidak diindeks adalah yang terbaru. (Juga, pastikan klien Anda memiliki pekerjaan pemeliharaan indeks yang dijadwalkan secara rutin)

exec sp_msforeachtable "DBCC DBREINDEX('?')"
go

exec sp_msforeachtable "UPDATE STATISTICS ? WITH FULLSCAN, COLUMNS"
go

Ini adalah referensi kanonik:Lambat dalam Aplikasi, Cepat di SSMS?

Jika masalah masih ada setelah membangun kembali indeks dan memperbarui statistik, maka Anda memiliki beberapa opsi:

  1. Gunakan SQL dinamis (tapi baca ini dulu:Kutukan dan Berkah SQL Dinamis)

  2. Gunakan OPTIMIZE FOR

  3. Gunakan WITH(RECOMPILE)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. STRING_SPLIT() di SQL Server 2016 :Tindak Lanjut #1

  2. Mana yang lebih cepat COALESCE ATAU ISNULL?

  3. UNION ALL vs kondisi ATAU dalam permintaan server sql

  4. Cara Mengonversi String ke Tanggal/Waktu di SQL Server menggunakan CAST()

  5. Apa itu Basis Data, Mengapa Basis Data?