In primul rand multumesc tuturor pentru raspunsuri.
Revin cu detalii:
rremus:
Primul lucru de incercat: daca area_source_id, area_sink_id si
data_type_id impreuna sint destule de selective (o combinatie de valori
alege doar 5-10% din toate record-urile) si query-ul tau este tipic
pentru aplicatie atunci solutia simpla este sa schimbi indexul
clustered sa fie in ordinea data_type_id, area_source_id, area_sink_id,
efective_date
Effective_date este cel mai selectiv.
Pentru un effective_date sunt cam 4000 de randuri, restul campurilor
din index au 5-50 valori distincte. La o tabela de cateva milioane de
randuri, nu am avut de ales alta ordine a coloanelor din index.
rremus:
Mai sint si probleme care pot apare din auto-parametrizare daca planul
a fost generat pe alte valori ale constantelor (mai ales
effective_date)
Inainte de script am rulat tot timpul:
DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE
GO
rremus:
Si nu in utimul rind incearca sa scapi de OR-ul explicit cit si de cele
implicite ( IN este de fapt un OR). OR este killer-ul sargabilitatzii.
Chiar si un UNION intre doua query-uri poate fi mai optim decit un
predicat OR.
Pai am scapat de OR. Am rulat scriptul:
UPDATE cor_time_Serie
SET termination_date = '2050-01-01'
WHERE termination_Date IS NULLsi am schimbat ultima conditie pe data:
AND effective_date BETWEEN '2008-09-11 10:00PM' AND termination_dateRezultatul este acelasi :(