Ejecutamos un sitio web que tiene filas de 250MM en una tabla y en otra tabla a la que nos unimos para la mayoría de las consultas tiene menos de 15MM de filas.
Estructuras de muestra:
MasterTable (Id, UserId, Created, Updated...) -- 15MM Rows
DetailsTable (Id, MasterId, SomeColumn...) -- 250MM Rows
UserTable (Id, Role, Created, UserName...) -- 12K Rows
Regularmente tenemos que hacer algunas consultas en todas estas tablas. Una es obtener estadísticas para usuarios gratuitos (~ 10k usuarios 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
El problema es que esta consulta algunas veces durará mucho tiempo debido al hecho de que las uniones ocurren mucho antes del where.
En este caso, ¿sería más sabio usar dónde en lugar de unirse o posiblemente where column in(...)
?