تخطَّ إلى المحتوى

🗄️ شرح SQL وقواعد البيانات

فهرسة SQL — الأساسيات (B-Tree)

الدرس 25 من 32· ⏱ 1 دقائق قراءة· 🗓 آخر تحديث: ١٧ يوليو ٢٠٢٦

💡 يفترض هذا الدرس أنك تعرف بالفعل كيف تُنشئ فهرسًا (CREATE INDEX) من درس الفهارس والأداء — هنا نشرح لماذا تعمل الفهارس أصلًا (بنية B-Tree) ومتى فعليًا تفيدك أو لا تفيدك.

لماذا الفهارس؟

الفهرس (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);

يضمن عدم تكرار القيم ويسرّع البحث — أداة مزدوجة.

🎯 التالي: استراتيجيات فهرسة متقدمة.

شرح فهرسة SQL — الأساسيات (B-Tree) — SQL وقواعد البيانات بالعربي
فهرسة SQL — الأساسيات (B-Tree)SQL وقواعد البيانات بالعربي · The Code Fix

📚 لمزيد من التعمّق في SQL وقواعد البيانات، راجِع توثيق SQL في PostgreSQL.

هل كان هذا الدرس مفيدًا؟