Salutare,
In primul rand ma bucur ca exista un forum dedicat celor ce utilizeaza MSSQL-ul.
Am o nelamurire cu privire la modul in care sunt utilizati indecsii in MSSQL si la modul cum se executa interogarile.
Mai exact am un query de forma:
select T1.col1, T2.col2 from
Table1 T1 inner join Table T2 on T1.collegatura=T2.collegatura
inner join (select distinct col3 as legatura2 from T2) T3 on T3.legatura2=T1.collegatura2
Sper sa fie destul de explicit, interogarea initiala cuprinde un join intre 9 tabele dintre care 2 sunt foarte mari printre care cele 2 in cauza T1, T2.
Ca o observatie "select distinct" in cele mai multe cazuri returneaza o inregistrare maxim 3 inregistrari.
Daca rulez "select distinct" separat am un timp de cateva milisecunde, introdus in selectul mare produce o nebunie curata cateva minute de executie(avand in vedere ca imi trebuie mai putin de 10 secunde).
Inlocuind "select distinct" cu o constanta ajung la un timp de 4 secunde.
Intrebari:
1.In selectul initial(join-uri) se executa "select distinct" pentru fiecare row.
2. Daca am un index (care e cam degeba datorita selectivitatii reduse) pe col3 din T2 voi avea in in excution plan un idex scan + agregare, de ce nu merge pe index seek, avand in vedere ca, clauza de where este aceeasi coloana cat si selectul returneaza coloana din index?
Multumesc