Chúng tôi điều hành một trang web có các hàng 250MM trong một bảng và trong một bảng khác mà chúng tôi tham gia với hầu hết các truy vấn chỉ dưới 15MM hàng.
Cấu trúc mẫu:
MasterTable (Id, UserId, Created, Updated...) -- 15MM Rows
DetailsTable (Id, MasterId, SomeColumn...) -- 250MM Rows
UserTable (Id, Role, Created, UserName...) -- 12K Rows
Chúng tôi thường xuyên phải thực hiện một vài truy vấn đối với tất cả các bảng này. Một là lấy số liệu thống kê cho người dùng miễn phí (~ 10k người dùng miễn phí).
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
Vấn đề là truy vấn này đôi khi sẽ chạy một thời gian dài chết tiệt do thực tế là các phép nối xảy ra rất lâu trước khi có.
Trong trường hợp này, sẽ là khôn ngoan hơn khi sử dụng địa điểm thay vì tham gia hoặc có thể where column in(...)
?