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

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

فهرسة SQL — استراتيجيات متقدمة

الدرس 27 من 29· ⏱ 1 دقائق قراءة

الفهرس الجزئي (Partial Index)

يفهرس فقط مجموعة فرعية من البيانات — يوفر مساحة ويسرّع الاستعلامات التي تستهدف جزءًا محدّدًا:

CREATE INDEX idx_active_users ON users(is_active)
WHERE is_active = true;

الاستعلامات التي تبحث عن المستخدمين النشطين فقط تستفيد من هذا الفهرس دون أن تمسّ المستخدمين المحذوفين.

الفهرس الغلافي (Covering Index / INCLUDE)

إذا كان الاستعلام يحتاج أعمدة إضافية بجانب عمود البحث، أضفها بـ INCLUDE لتجنب الرجوع إلى الجدول:

CREATE INDEX idx_users_email ON users(email) INCLUDE (name, avatar_url);

الاستعلام SELECT name, avatar_url FROM users WHERE email = ? يُحلّ بالكامل من الفهرس — Index-Only Scan.

فهرسة JSONB في PostgreSQL

CREATE INDEX idx_users_prefs ON users USING gin(preferences jsonb_path_ops);

يسمح بالبحث الفعّال داخل أعمدة JSONB.

الفهرسة على التعابير (Index on Expression)

CREATE INDEX idx_users_lower_email ON users(LOWER(email));

SELECT * FROM users WHERE LOWER(email) = 'user@example.com';

يحلّ مشكلة إلغاء الفهرس بسبب الدوال.

إدارة الفهارس في الإنتاج

-- إنشاء فهرس بدون قفل الجدول (PostgreSQL)
CREATE INDEX CONCURRENTLY idx_users_email ON users(email);

-- حذف فهرس غير مستخدم
DROP INDEX CONCURRENTLY IF EXISTS idx_unused;

-- عرض الفهارس في PostgreSQL
SELECT indexname, indexdef FROM pg_indexes WHERE tablename = 'users';

⚠️ استخدم CONCURRENTLY في الإنتاج لتجنب قفل الجدول — لكنه أبطأ.

🎯 التالي: تحسين الاستعلامات (Query Optimization).

شرح فهرسة SQL — استراتيجيات متقدمة — SQL وقواعد البيانات بالعربي
فهرسة SQL — استراتيجيات متقدمةSQL وقواعد البيانات بالعربي · The Code Fix

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

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