1つのテーブルに250MMの行があり、ほとんどのクエリで結合する別のテーブルに15MM未満の行があるWebサイトを実行します。
サンプル構造:
MasterTable (Id, UserId, Created, Updated...) -- 15MM Rows
DetailsTable (Id, MasterId, SomeColumn...) -- 250MM Rows
UserTable (Id, Role, Created, UserName...) -- 12K Rows
これらすべてのテーブルに対していくつかのクエリを定期的に行う必要があります。1つは、無料ユーザー(最大1万人の無料ユーザー)の統計を取得することです。
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(...)
か?