한 테이블에 250MM 개의 행이있는 웹 사이트를 실행하고 대부분의 쿼리에 대해 다른 테이블에 연결하는 웹 사이트는 15MM 미만입니다.
샘플 구조 :
MasterTable (Id, UserId, Created, Updated...) -- 15MM Rows
DetailsTable (Id, MasterId, SomeColumn...) -- 250MM Rows
UserTable (Id, Role, Created, UserName...) -- 12K Rows
우리는 정기적으로 이러한 모든 테이블에 대해 몇 가지 쿼리를 수행해야합니다. 하나는 무료 사용자 (~ 10k 무료 사용자)에 대한 통계를 얻는 것입니다.
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
문제는이 쿼리가 조인이 어디보다 오래 전에 발생한다는 사실 때문에 오랜 시간이 걸리는 것입니다.
이 경우 조인 또는 가능한 위치를 사용하는 것이 더 현명 where column in(...)
합니까?