بنناجح
المرحلة 3: الـ Index في الشغل · الدرس 1 من 4 · 10 دقيقة

اتأكد بـ EXPLAIN

مفيش حاجة اسمها "أظن الـ Index اشتغل". الدرس ده بيعلمك تقرا EXPLAIN في MySQL و PostgreSQL، وتقارن المتوقع بالحقيقي.

في الدرس ده هتتعلم
  • تقرا عمود type من الأحسن للأسوأ
  • تفهم Extra وأنواع الـ Scan في PostgreSQL
  • تستخدم EXPLAIN ANALYZE على داتا بحجم الإنتاج

1. EXPLAIN قبل وبعد

مفيش حاجة اسمها “أظن الـ Index اشتغل”. اتأكد بـ EXPLAIN:

explain.sql
-- قبل
EXPLAIN SELECT * FROM users WHERE email = 'omar@mail.com';
-- type: ALL     key: NULL     rows: 9,982,412    ← Full Scan

-- بعد
ALTER TABLE users ADD UNIQUE INDEX users_email_unique (email);
EXPLAIN SELECT * FROM users WHERE email = 'omar@mail.com';
-- type: const   key: users_email_unique   rows: 1   ✓

2. عمود type

عمود type في MySQL، من الأحسن للأسوأ:

type معناه
const صف واحد بالـ PK أو Unique
eq_ref في JOIN: صف واحد لكل صف من الجدول التاني
ref بحث بالتساوي على Index مش Unique
range Range: >، BETWEEN، IN، LIKE 'x%'
index قرا الـ Index كله (لسه Scan)
ALL Full Table Scan

3. Extra و PostgreSQL

وفي عمود Extra:

  • Using index ← Covering ✓
  • Using index condition ← Index Condition Pushdown
  • Using filesort ← Sort إضافي ⚠️
  • Using temporary ← جدول مؤقت ⚠️

وفي PostgreSQL هتشوف: Seq Scan و Index Scan و Index Only Scan و Bitmap Heap Scan.

4. EXPLAIN ANALYZE

والأهم: EXPLAIN ANALYZE (MySQL 8.0.18+ و PostgreSQL) بينفّذ الكويري فعلاً. قارن الـ rows المتوقعة بالـ حقيقية: لو الفرق ضخم، الإحصائيات قديمة. وجرّب دايماً على داتا بحجم الإنتاج، لأن الخطة على جدول فيه 100 صف ملهاش علاقة بجدول فيه 10 مليون.

وده شكل لوحة المراقبة بعد الـ Index: الـ Login بقى 3 مللي ثانية، والـ CPU نزل لـ 11%.

لوحة المراقبة بعد الـ Index
علّم عليه لما تقدر تجاوب أسئلة الإنترفيو من غير ما تبص.