18/02/2025
🚀 ترتيب الأعمدة في الـ Index بيأثر على سرعة الـ Query!
أحيانًا بتحس أنو الـ Database عندك بطيئة، وأول شيء ممكن تفكر فيه: هل الاندكسات عندي معمولة بشكل صحيح؟
بتراجعهم، وبتلاقي أنو عندك Indexes، لكن الكويري لسا بطيئة! طيب وين المشكلة؟ 🤔
🔹 قبل كل شي، جاوبني ع هالسؤال:
عندنا هالكويري:
SELECT * FROM sales WHERE region = 'North' AND amount > 500 AND date >= '2024-01-01';
هل في فرق بين هالـ Indexes؟
INDEX(region, amount, date)
INDEX(date, region)
INDEX(region, amount)
أو كلن نفس الشي؟
الجواب: أكيد في فرق كبير! والـ Index الأفضل هو: INDEX(region, amount)
🤔 ليش ترتيب الأعمدة بالـ Index مهم؟
لأنو الـ Database Engine بيقرأ الاندكس بطريقة مرتبة ومنظمة، وأي خطأ بسيط بترتيب الأعمدة ممكن يخلي الكويري بطيئة بدل ما تكون سريعة! 🚀
إذا بدك تعرف كيف تختار الترتيب الصح، امشي على هالـ 5 خطوات البسيطة:
🛠 5 خطوات لاختيار أفضل Index!
✅ 1️⃣ ضع جميع الأعمدة اللي بتستخدم = أولًا.
✅ 2️⃣ بعدها ضع فقط عمود واحد فيه > أو < أو BETWEEN أو LIKE 'X%'.
✅ 3️⃣ إذا كان في ORDER BY أو GROUP BY، أضفهم آخر شي إذا ممكن.
✅ 4️⃣ لا تخلط ASC مع DESC، لأنو بيخلي الـ Index غير مفيد.
✅ 5️⃣ إذا الكويري بتستخدم أعمدة معينة، الأفضل تضيفها كلها بالـ Index حتى ما يضطر MySQL يقرأ من الجدول (Covering Index).
🔹 أمثلة عملية:
📌 مثال 1:
SELECT * FROM orders
WHERE status = 'shipped'
AND created_at >= '2025-01-01'
AND approved_at < '2025-02-01'
ORDER BY price ASC;
✅ أفضل Index هو: INDEX(status, created_at, price)
💡 ليش؟
• status = 'shipped' (شرط = يجي أول شي بالـ Index).
• created_at >= (شرط مقارنة >= يجي بعد =).
• ORDER BY price ASC (ممكن إضافته إذا كان بالترتيب الصح).
📌 مثال 2:
SELECT id, name FROM customers
WHERE country = 'Germany'
AND status = 'active'
ORDER BY last_purchase DESC;
✅ أفضل Index هو:INDEX(country, status, last_purchase, id, name)
💡 ليش؟
• country و status شروط =، بيجوا أول شي.
• last_purchase يساعد MySQL على ترتيب البيانات بدون ما يعمل Sorting إضافي.
• id, name لجعل الـ Index Covering (يعني MySQL بيقرأ البيانات مباشرة من الاندكس بدون الرجوع للجدول).
🚀 النتيجة؟ Queries أسرع بـ 10-100X! ⚡
• ترتيب الأعمدة داخل الـ Index مش اعتباطي، بيأثر مباشرة على سرعة الكويري.
• تطبيق هالخطوات رح يخفض وقت التنفيذ من ثواني إلى ميلي ثواني! 🚀
• استخدم EXPLAIN عشان تشوف إذا MySQL بيستخدم الاندكس بشكل صحيح.
📌 احفظ هالبوست ورح يفيدك كل مرة بتحسن أداء الـ Database!
بالصورة في بعض الأمثلة يلي ممكن تفيدك