Executamos um site com 250 MM de linhas em uma tabela e em outra tabela à qual o associamos à maioria das consultas tem pouco menos de 15 MM de linhas.
Estruturas de amostra:
MasterTable (Id, UserId, Created, Updated...) -- 15MM Rows
DetailsTable (Id, MasterId, SomeColumn...) -- 250MM Rows
UserTable (Id, Role, Created, UserName...) -- 12K Rows
Regularmente, precisamos fazer algumas consultas em todas essas tabelas. Um deles é pegar estatísticas para usuários gratuitos (~ 10.000 usuários gratuitos).
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
O problema é que essa consulta algumas vezes demora muito, devido ao fato de as junções acontecerem muito antes do local.
Nesse caso, seria mais sensato usar wherees em vez de junções ou possivelmente where column in(...)
?