- بواسطة x32x01 ||
Over-fetching Problem: لما تجيب كل حاجة وانت محتاج جزء بس 🍽️
البوست اللي فات كنا اتكلمنا عن سيناريو في الكافيه، وقلت للويتر تطلب حاجات كتير ومبهدلته 😅
هنعمل نفس السيناريو، بس وإنت جعان 😋
"أنا عايز ساندوتش برجر"
الويتر مشي وفجأة رجع بصينية ضخمة فيها كل الأكل اللي الكافيه بيقدمه! 😱
وده بالظبط اللي بيحصل جوه database لما تكتب:
المطلوب: نعرض بس اسم المستخدم والإيميل بتاعه
لو كتبت:
يعني انت قلت للـ Database: "هاتلي كل حاجة!" 😅
"أنا عايز ساندوتش برجر بس!"
وفي SQL معناه:
النتيجة:
البوست اللي فات كنا اتكلمنا عن سيناريو في الكافيه، وقلت للويتر تطلب حاجات كتير ومبهدلته 😅
هنعمل نفس السيناريو، بس وإنت جعان 😋
السيناريو: الكافيه وجبلك كل حاجة 😲
قلت للويتر:"أنا عايز ساندوتش برجر"
الويتر مشي وفجأة رجع بصينية ضخمة فيها كل الأكل اللي الكافيه بيقدمه! 😱
- إنت طلبت ساندوتش واحد
- لكن جابلك كل حاجة موجودة في المطبخ
- الترابيزة بقت مزحومة من غير داعي
- والنتيجة: أكل كتير مش محتاجه
وده بالظبط اللي بيحصل جوه database لما تكتب:
SQL:
SELECT * FROM users; فهم المشكلة في SQL 📊
خلينا نقول عندنا جدول مستخدمين (users) فيه الأعمدة: SQL:
name, email, password, phone, address, bio, profile_picture, created_at, updated_at لو كتبت:
SQL:
SELECT * FROM users; - انت محتاج عمودين بس: 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 (الصينية المليانة) 🍽️
التعديل الأخير: