У нас есть веб-сайт с 250-миллиметровыми строками в одной таблице, а в другой, к которой мы присоединяемся, для большинства запросов чуть менее 15-миллиметровых строк.
Примерные структуры:
MasterTable (Id, UserId, Created, Updated...) -- 15MM Rows
DetailsTable (Id, MasterId, SomeColumn...) -- 250MM Rows
UserTable (Id, Role, Created, UserName...) -- 12K Rows
Нам регулярно приходится делать несколько запросов ко всем этим таблицам. Одним из них является сбор статистики для бесплатных пользователей (~ 10 тыс. Бесплатных пользователей).
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
Проблема в том, что этот запрос иногда выполняется слишком долго из-за того, что соединения происходят задолго до того, как.
В этом случае было бы разумнее использовать Wheres вместо объединений или , возможно where column in(...)
?