So sánh · Include hai collection và AsSplitQuery
Cartesian explosion: vì sao Include hai collection lại chậm
Include hai collection so với AsSplitQuery
Một khách hàng có 10 contact và 20 lead: Include trong một câu JOIN trả 200 dòng, AsSplitQuery bắn ba câu lệnh trả 31 dòng rồi ghép ở client.
INCLUDE × 2 · SINGLE QUERY
1 câu lệnh, dữ liệu bị nhân bản
ASSPLITQUERY · 3 CÂU LỆNH
3 câu lệnh, không dòng nào lặp
Customer
1 dòng
Contacts
10 dòng
Leads
20 dòng
JOIN trong 1 câu SQL
Include(Contacts).Include(Leads)
10 × 20 = 200 dòng cho 1 khách hàng
× 100 khách = 20.000 dòng qua mạng
Customer
Câu 1 · 1 dòng
Contacts
Câu 2 · 10 dòng
Leads
Câu 3 · 20 dòng
Ghép quan hệ ở client
EF Core tự nối theo khoá
1 + 10 + 20 = 31 dòng cho 1 khách hàng
× 100 khách = 3.100 dòng, đổi lấy 3 round trip
CHÚ GIẢI
1 ô = 1 dòng kết quả · mỗi dòng của JOIN lặp đủ cột Customer + Contact + Lead
© tiennhm