لماذا الفهارس؟
الفهرس (Index) يمنح قاعدة البيانات خريطة سريعة للوصول إلى الصفوف المطلوبة دون مسح الجدول كاملًا (Full Table Scan).
بدون فهرس، تفحص القاعدة كل صف — مع فهرس، تنتقل مباشرة إلى الموقع.
هيكل B-Tree
الأكثر شيوعًا هو B-Tree (Balanced Tree):
- البيانات مرتبة ترتيبًا تصاعديًا.
- البحث يستغرق O(log n).
- فعّال للبحث بالقيم المحددة والمدى (
BETWEEN,>,<).
متى يفيد الفهرس؟
-- سريع جدًا مع الفهرس
SELECT * FROM users WHERE email = 'a@b.com';
-- فعّال مع نطاق
SELECT * FROM orders WHERE created_at > '2025-01-01';
-- يساعد في الترتيب
SELECT * FROM products ORDER BY price DESC;
متى لا يفيد؟
- أعمدة بتفرّد منخفض (جنس، حالة) — عدد قليل من القيم المكرّرة.
- جداول صغيرة جدًا (مسح كامل أسرع).
- دوال على العمود:
WHERE YEAR(date) = 2025(يلغي الفهرس).
الفهرس المركّب (Composite Index)
فهرس على أكثر من عمود:
CREATE INDEX idx_orders_user_date ON orders(user_id, created_at);
قاعدة اليد اليسرى (Leftmost Prefix): يُستخدم لأي استعلام يبدأ بـ user_id، ثم user_id + created_at، لكن ليس created_at فقط.
⚠️ رتّب الأعمدة من الأكثر تفرّدًا إلى الأقل تفرّدًا.
الفهرس الفريد
CREATE UNIQUE INDEX idx_users_email ON users(email);
يضمن عدم تكرار القيم ويسرّع البحث — أداة مزدوجة.
🎯 التالي: استراتيجيات فهرسة متقدمة.