เราเรียกใช้เว็บไซต์ที่มีแถว 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(...)
?