الفهارس الجزئية وفهارس التعابير
فهرس الصفوف التي تهمك فقط باستخدام عبارات WHERE، وفهرس التعابير المحسوبة (lower(email)، date_trunc('day', ts))
الفهارس الجزئية وفهارس التعابير درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.
الفهرس الجزئي: فهرسة مجموعة فرعية
يغطي الفهرس الجزئي الصفوف التي تطابق عبارة WHERE عند إنشاء الفهرس فقط. وهو أصغر حجمًا وأسرع، ومناسب جدًا للاستعلامات الشائعة:
CREATE INDEX users_active_email_idx
ON users(email)
WHERE deleted_at IS NULL;متى تتفوق الفهارس الجزئية
استخدمها عندما:
- تقوم دائمًا بالتصفية وفق الشرط نفسه (مثل الحذف المنطقي)
- تهيمن قيمة واحدة على العمود (مثل امتلاك 95% من الصفوف للقيمة status='closed')
- تريد فهرسًا صغيرًا ونشطًا في ذاكرة التخزين المؤقت
مثال: الجلسات النشطة
معظم الجلسات منتهية الصلاحية؛ ولا يُستعلم إلا عن الجلسات النشطة:
CREATE INDEX sessions_active_idx ON sessions(user_id)
WHERE expires_at > NOW();
-- Caveat: planner can't use NOW() in the index predicate — use a fixed timestamp
-- and reindex periodically, OR use a boolean column.أفضل: استخدم شرطًا ثابتًا
يجب أن يكون شرط الفهرس immutable. ولا تصلح التعبيرات المعتمدة على الوقت مثل (NOW()). استخدم عمودًا مثل is_active بدلًا من ذلك:
CREATE INDEX sessions_active_idx ON sessions(user_id)
WHERE is_active = true;
-- The query must use the same predicate to match the index:
SELECT * FROM sessions WHERE is_active = true AND user_id = 42;فهرس التعبير
فهرسة دالة مطبقة على عمود:
CREATE INDEX users_email_lower_idx ON users(LOWER(email));
SELECT * FROM users WHERE LOWER(email) = LOWER('Alice@Example.com');
-- Uses the expression index.فهارس التعبيرات الشائعة
LOWER(email)للبحث غير الحساس لحالة الأحرف(price * tax_rate)للفرز حسب قيمة محسوبةdate_trunc('day', created_at)للتقارير اليومية(data ->> 'user_id')::BIGINTلاستخراج القيم من JSONB
يجب أن يكون التعبير IMMUTABLE
يجب تمييز التعبير بأنه IMMUTABLE — أي إن نتيجته تعتمد على المدخل فقط. ولا تصلح RANDOM() أو NOW() أو CURRENT_USER.
دمج الفهرس الجزئي مع فهرس التعبير
يمكن الجمع بينهما:
CREATE INDEX articles_active_title_idx
ON articles(LOWER(title))
WHERE published_at IS NOT NULL;الفهارس الجزئية الفريدة
النمط الكلاسيكي لـ "صف نشط واحد":
CREATE UNIQUE INDEX users_one_active_email
ON users(email)
WHERE deleted_at IS NULL;
-- Same email can exist many times in deleted users, but only once active.يجب أن يطابق شرط الفهرس الاستعلام
لا يستخدم المخطط الفهرس الجزئي إلا عندما تكون عبارة WHERE في الاستعلام "تستلزم" شرط الفهرس:
-- Index: WHERE is_active = true
-- Match: WHERE is_active = true AND user_id = 42 ✓
-- Match: WHERE is_active AND user_id = 42 ✓
-- No: WHERE user_id = 42 ✗
-- No: WHERE is_active IS NOT FALSE ✗ (logically same but planner may not realise)لا تفرط في الاستخدام
قد تؤدي الفهارس الجزئية الكثيرة التي تغطي مجموعات فرعية منفصلة إلى إبطاء عمليات الكتابة (إذ يجب على كل INSERT تحديث جميع الفهارس ذات الصلة). استخدمها باعتدال للاستعلامات كثيرة الاستخدام.
مراجعة
توفر الفهارس الجزئية وفهارس التعبيرات أداءً أكبر مقابل كل بايت.
- الفهرس الجزئي: فهرسة المجموعة الفرعية التي تستعلم عنها فقط
- فهرس التعبير: فهرسة القيم المحسوبة
- كلاهما يتطلب تعابير IMMUTABLE
- يجب أن يستخدم الاستعلام الشرط نفسه حتى يطابق الفهرس
تحقق سريع
تريد إجراء عمليات بحث غير حساسة لحالة الأحرف باستخدام البريد الإلكتروني. أي فهرس هو الأكثر كفاءة؟
الأسئلة الشائعة
هل درس «الفهارس الجزئية وفهارس التعابير» مجاني؟
نعم — نص درس «الفهارس الجزئية وفهارس التعابير» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.
ماذا ستتعلم في «الفهارس الجزئية وفهارس التعابير»؟
فهرس الصفوف التي تهمك فقط باستخدام عبارات WHERE، وفهرس التعابير المحسوبة (lower(email)، date_trunc('day', ts)) تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟
لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «الفهارس الجزئية وفهارس التعابير»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟
نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- فهارس B-tree مقابل Hash مقابل GiST مقابل GIN
- الفهارس المركبة وترتيب الأعمدة
- الفهارس الجزئية وفهارس التعابير
- صيانة الفهارس وتضخمها