مشكلة N+1
في هذا الدرس 4 موضوعات
هذا الدرس مخطط له. يعرض المخطط أدناه الموضوعات التي سيغطيها، ولم يُنشر الدرس الكامل بعد.
نص الدروس والتمارين باللغة الإنجليزية، بينما تبقى واجهة الموقع وعناوين الدروس بالعربية.
في هذا الدرس
recognize N+1 in logs and tests.
الموضوعات المخطط لها
- N+1: one query loads N parents, then one more query per parent loads its children (or relation).
- 100 orders become 1 + 100 = 101 queries.
- It hides in lazy relations touched in a loop, or in mapping code that reads
order.getCustomer().getName(). - Detect it in the SQL log (repeated similar selects) or with a query counter in tests.
- It is fast on a developer machine with 5 rows and slow in production.
تفاصيل المخطط المبدئي
عرض عملي
List<Order> orders = orderRepository.findAll(); // 1 query
for (Order o : orders) {
System.out.println(o.getLines().size()); // +1 query per order
}اختبر فهمك
How many queries for 100 orders with N+1?
أظهر الإجابة
101.
التطبيق
طبّق هذا الدرس بمختبر الوحدة وتمارينها واختبارها.
تعليم الدرس كمكتمل اختياري ويمكنك التراجع عنه في أي وقت. يبقى تقدمك محفوظًا في هذا المتصفح.