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

Mengapa kueri ini tidak menggunakan indeks yang tepat?

Itu tidak tahu apa nilai variabel ketika mengkompilasi kueri. Anda dapat mencoba OPTION (RECOMPILE) .

Saya berasumsi bahwa penambahan AND klausa dalam kueri (meskipun secara logis membuatnya tidak lebih selektif sama sekali) harus menyesatkan pengoptimal untuk memperkirakan kueri dengan selektivitas yang lebih besar sehingga memberi Anda rencana yang Anda inginkan!

Anda mengatakan di komentar bahwa versi tanpa ExceptionDate = ExceptionDate diperkirakan 88234.8 baris dan versi dengan 8823.48

Umumnya dengan tidak adanya statistik yang dapat digunakan, SQL Server kembali ke heuristik tergantung pada jenis operator perbandingan dalam predikat.

Diasumsikan bahwa > predikat akan mengembalikan 30% dari baris misalnya dan bahwa = predikat akan mengembalikan 10% dari baris sehingga sepertinya hanya menerapkannya secara langsung ke hasil perkiraan pertama. Menarik bahwa itu tidak memperhitungkan fakta bahwa persamaan melawan kolom itu sendiri di sini!

c.f. Praktik Terbaik untuk Mengelola Statistik - Hindari penggunaan variabel lokal dalam 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. Bagaimana saya bisa menggabungkan dan membuat grup teks di sql server?

  2. Bagaimana cara mengubah setiap kolom nvarchar menjadi varchar?

  3. Koneksi JDBC ke server MSSQL dalam mode otentikasi windows

  4. SQL Server Ekspresi reguler di T-SQL

  5. Mengonversi kunci utama int ke bigint di Sql Server