Eseguiamo un sito Web con 250MM di righe in una tabella e in un'altra tabella a cui ci uniamo per la maggior parte delle query ha appena meno di 15MM di righe.
Strutture campione:
MasterTable (Id, UserId, Created, Updated...) -- 15MM Rows
DetailsTable (Id, MasterId, SomeColumn...) -- 250MM Rows
UserTable (Id, Role, Created, UserName...) -- 12K Rows
Dobbiamo regolarmente fare alcune domande su tutte queste tabelle. Uno sta prendendo le statistiche per gli utenti gratuiti (~ 10k utenti gratuiti).
Select Count(1) from DetailsTable dt
join MasterTable mt on mt.Id = dt.MasterId
join UserTable ut on ut.Id = mt.UserId
where ut.Role is null and mt.created between @date1 and @date2
Il problema è che questa query verrà eseguita a volte per un tempo dannatamente lungo a causa del fatto che i join avvengono molto prima del dove.
In questo caso, sarebbe più saggio utilizzare Wherees invece di Join o possibilmente where column in(...)
?