
- بواسطة 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;

النتيجة: أداء أسرع



التعديل الأخير: