Kami menjalankan situs web yang memiliki 250MM baris dalam satu tabel dan di tabel lain yang kami gabungkan untuk sebagian besar kueri yang memiliki hanya di bawah 15MM baris.
Struktur sampel:
MasterTable (Id, UserId, Created, Updated...) -- 15MM Rows
DetailsTable (Id, MasterId, SomeColumn...) -- 250MM Rows
UserTable (Id, Role, Created, UserName...) -- 12K Rows
Kami secara teratur harus melakukan beberapa pertanyaan terhadap semua tabel ini. Salah satunya adalah meraih statistik untuk pengguna gratis (~ 10k pengguna gratis).
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
Masalahnya adalah permintaan ini beberapa kali akan berjalan sangat lama karena fakta bahwa sambungan terjadi jauh sebelum di mana.
Dalam hal ini apakah akan lebih bijaksana untuk menggunakan where daripada join atau mungkin where column in(...)
?