Condiţia "'2008-09-11 10:00PM' BETWEEN effective_date AND termination_date" este înţeleasă de SQL Server sub forma "effective_date<='2008-09-11 10:00PM' AND termination_date>='2008-09-11 10:00PM'", deci două condiţii independente (pe coloane diferite), ambele cu inegalităţi.
Ai spus că "Pentru un effective_date sunt cam 4000 de randuri". Înţeleg că sunt vreo 4000 de rânduri cu valori între 2008-09-11 00:00 şi 2008-09-11 23:59. Totuşi, un index seek pentru condiţia "effective_date<='2008-09-11 10:00PM" nu returnează câteva mii de rânduri, ci milioane, pentru că nu avem nicio valoare minimă pentru effective_date.
Există vreo relaţie între effective_date şi termination_date, cum ar fi "termination_date este la maxim 3 zile după effective_date" ?
Dacă da, atunci putem să ne folosim de condiţia "termination_date>='2008-09-11 10:00PM'" ca să adăugăm încă o condiţie de genul "effective_date>='2008-09-08 10:00PM'". Astfel, avem un interval delimitat la ambele capete, iar un index seek pe effective_date ar returna doar vreo 12000 rânduri, care pot fi prelucrate rapid (cu celelalte condiţii).
Răzvan