اتأكد بـ EXPLAIN
مفيش حاجة اسمها "أظن الـ Index اشتغل". الدرس ده بيعلمك تقرا EXPLAIN في MySQL و PostgreSQL، وتقارن المتوقع بالحقيقي.
في الدرس ده هتتعلم
- تقرا عمود
typeمن الأحسن للأسوأ - تفهم
Extraوأنواع الـ Scan في PostgreSQL - تستخدم
EXPLAIN ANALYZEعلى داتا بحجم الإنتاج
1. EXPLAIN قبل وبعد
مفيش حاجة اسمها “أظن الـ Index اشتغل”. اتأكد بـ EXPLAIN:
-- قبل
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 PushdownUsing 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
علّم عليه لما تقدر تجاوب أسئلة الإنترفيو من غير ما تبص.