sql >> Databasteknik >  >> RDS >> Sqlserver

Varför använder den här frågan inte rätt index?

Den vet inte vad värdet på variablerna kommer att vara när den kompilerar frågan. Du kan prova OPTION (OMKOMPILERA) .

Jag antar att tillägget av AND klausulen i frågan (även om den logiskt sett inte gör den mer selektiv alls) måste vilseleda optimeraren till att uppskatta frågan med större selektivitet och därmed ge dig den plan du ville ha!

Du säger i kommentarerna att versionen utan ExceptionDate =ExceptionDate uppskattas till 88234.8 rader och versionen med 8823.48

Generellt i avsaknad av användbar statistik faller SQL Server tillbaka till heuristik beroende på typen av jämförelseoperator i predikatet.

Det förutsätter att en > predikat kommer att returnera 30% av raderna till exempel och att en = predikat kommer att returnera 10 % av raderna så det ser ut som att det bara appliceras direkt på resultatet av den första uppskattningen. Intressant att den inte tar hänsyn till att lika är mot själva kolumnen här!

c.f. Bästa metoder för att hantera statistik – Undvik användning av lokala variabler i frågor a>



  1. hur får man värden från kryssrutan och skickar den till en annan jsp-sida?

  2. Python mysql.connector - Rätt sätt att hämta en rad som ordbok

  3. Lära 2 SUM() motsvarande hjälpare?

  4. PostgreSQL multi-värde upserts