N+1 xảy ra khi app query danh sách rồi query từng item con riêng lẻ. Cách xử lý: join/preload, batch query với WHERE id = ANY(...), aggregate JSON ở SQL nếu cần, hoặc DataLoader pattern ở GraphQL.
Ví dụ batch:
sql
SELECT * FROM order_items
WHERE order_id = ANY($1);Quan trọng là đo query count và latency theo request.
Index đúng vẫn không cứu được nếu app bắn hàng nghìn query nhỏ.