Ми запускаємо веб-сайт, який містить 250 рядків в одній таблиці, а в іншій таблиці, до якої ми приєднуємось для більшості запитів, має трохи менше 15 ММ рядків.
Зразки структур:
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
Проблема полягає в тому, що цей запит у деяких випадках триватиме проклятий час через те, що приєднання відбувається задовго до куди.
У цьому випадку було б розумніше використовувати wheres замість приєднання або, можливо where column in(...)
,?