- بواسطة x32x01 ||
Over-fetching Problem: لما تجيب كل حاجة وانت محتاج جزء بس 
البوست اللي فات كنا اتكلمنا عن سيناريو في الكافيه، وقلت للويتر تطلب حاجات كتير ومبهدلته
هنعمل نفس السيناريو، بس وإنت جعان
السيناريو: الكافيه وجبلك كل حاجة
قلت للويتر:
"أنا عايز ساندوتش برجر"
الويتر مشي وفجأة رجع بصينية ضخمة فيها كل الأكل اللي الكافيه بيقدمه!
وده بالظبط اللي بيحصل جوه database لما تكتب:
فهم المشكلة في SQL
خلينا نقول عندنا جدول مستخدمين (users) فيه الأعمدة:
المطلوب: نعرض بس اسم المستخدم والإيميل بتاعه
لو كتبت:
يعني انت قلت للـ Database: "هاتلي كل حاجة!"
المشكلة دي اسمها إيه؟
دي اسمها Over-fetching Problem أو SELECT * Anti-pattern
الحل: حدد الأعمدة اللي محتاجها
بدل ما الويتر يجيب كل حاجة، قلتله بوضوح:
"أنا عايز ساندوتش برجر بس!"
وفي SQL معناه:
النتيجة:
الخلاصة: مشاكل الأداء في الـ Database
البوست اللي فات كنا اتكلمنا عن سيناريو في الكافيه، وقلت للويتر تطلب حاجات كتير ومبهدلته
هنعمل نفس السيناريو، بس وإنت جعان
السيناريو: الكافيه وجبلك كل حاجة
قلت للويتر:"أنا عايز ساندوتش برجر"
الويتر مشي وفجأة رجع بصينية ضخمة فيها كل الأكل اللي الكافيه بيقدمه!
- إنت طلبت ساندوتش واحد
- لكن جابلك كل حاجة موجودة في المطبخ
- الترابيزة بقت مزحومة من غير داعي
- والنتيجة: أكل كتير مش محتاجه
وده بالظبط اللي بيحصل جوه database لما تكتب:
SQL:
SELECT * FROM users; فهم المشكلة في SQL
خلينا نقول عندنا جدول مستخدمين (users) فيه الأعمدة: SQL:
name, email, password, phone, address, bio, profile_picture, created_at, updated_at لو كتبت:
SQL:
SELECT * FROM users; يعني انت قلت للـ Database: "هاتلي كل حاجة!"
- انت محتاج عمودين بس: name, email
- لكن الـ Database جابتلك كل الأعمدة:
password, phone, address, bio, profile_picture, created_at, updated_at
المشكلة دي اسمها إيه؟
دي اسمها Over-fetching Problem أو SELECT * Anti-pattern- معناها: بتجيب بيانات أكتر من اللي محتاجه فعليًا
- زي ما الويتر جابلك الصينية كلها وانت طلبت ساندوتش واحد فقط

الحل: حدد الأعمدة اللي محتاجها
بدل ما الويتر يجيب كل حاجة، قلتله بوضوح:"أنا عايز ساندوتش برجر بس!"
وفي SQL معناه:
SQL:
SELECT name, email FROM users; النتيجة:
- حجم البيانات المنقولة أقل

- السيرفر أسرع

- استهلاك الـ Memory أقل

- الشبكة مش محملة بيانات زيادة

الخلاصة: مشاكل الأداء في الـ Database
- المشكلة الأولى: N+1 Problem (الويتر اللي رايح جاي)
- المشكلة الثانية: Over-fetching Problem (الصينية المليانة)
