- بواسطة x32x01 ||
تخيل نفسك قاعد في كافيه
وعايز تطلب قهوة:
مع إنك في الآخر أخدت كل اللي عايزه.
لما تكتب SQL query بطريقة غلط، بتعمل نفس القصة.
عندك جدول الطلبات (orders) وجدول الزبائن (customers):
لو عندك 100 طلب = (1 + 100) = 101 Query
بالظبط زي الويتر اللي رايح جاي 101 مرة!
ده اسمه N+1 Query Problem:

بدل ما الويتر يجيب كل حاجة لوحدها، ممكن يجيب القهوة والسكر واللبن مرة واحدة.
في SQL الحل إنك تستخدم JOIN:
كده عملت استعلام واحد
جبت بيه كل الطلبات ومعاها أسماء الزباين.
النتيجة: أداء أسرع
، وسيرفر أهدى وأكفأ
.
باختصار: مشكلة الـ N+1 Queries من أشهر مشاكل الأداء، وحلها بسيط باستخدام الـ JOIN أو طرق التحميل الذكي للبيانات.
- قلت للويتر: هاتلي قهوة

- رجع جاب القهوة… قلتله: هاتلي سكر

- رجع تاني… قلتله: هاتلي لبن

نفس اللي بيحصل مع الـ Database
لما تكتب SQL query بطريقة غلط، بتعمل نفس القصة.عندك جدول الطلبات (orders) وجدول الزبائن (customers):
SQL:
-- Query 1: نجيب الطلبات
SELECT * FROM orders;
-- وبعدين لكل طلب نجيب الزبون
SELECT * FROM customers WHERE id = 1;
SELECT * FROM customers WHERE id = 2;
SELECT * FROM customers WHERE id = 3; لو عندك 100 طلب = (1 + 100) = 101 Query
بالظبط زي الويتر اللي رايح جاي 101 مرة!
تعريف المشكلة
ده اسمه N+1 Query Problem:- Query واحد عشان القائمة الأساسية ➝ (الـ +1)
- وبعدين Query منفصل لكل عنصر في القائمة ➝ (N)
الحل
بدل ما الويتر يجيب كل حاجة لوحدها، ممكن يجيب القهوة والسكر واللبن مرة واحدة.في SQL الحل إنك تستخدم JOIN:
SQL:
SELECT orders.id, orders.total, customers.name AS customer_name
FROM orders
JOIN customers ON orders.customer_id = customers.id; النتيجة: أداء أسرع
التعديل الأخير: