“إضافة فهرس” ليست نصيحة سيئة. إنها نصيحة ناقصة.
السؤال الحقيقي هو: أي نوع من الاستعلامات تقوم بتحسينه؟
يدعم PostgreSQL أنواعاً متعددة من الفهارس لأن ليس كل أشكال الاستعلامات تشبه بعضها البعض. اتباع نمط الوصول المناسب هو ما يجعل اختيار الفهرس جيدًا بدلاً من الاعتماد بشكل أعمى على أي شيء يكون سهلاً للتوليد من واجهة المستخدم.
ابدأ بالاستعلام
اسأل عما يقوم به الاستعلام فعلياً:
- البحث عن القيم المتساوية
- مسح النطاق
- البحث النصي الكامل
- القرب الهندسي
- عضوية الوثيقة
يجب أن يأتي هذا السؤال قبل اختيار نوع الفهرس.
B-Tree هو الافتراضي، وليس الإجابة العالمية
B-tree متعدد الاستخدامات وغالباً ما يكون مناسبًا لـ:
- القيم المتساوية
- الترتيب
- النطاقات
لهذا السبب هو الخيار الافتراضي.
لكن حالات أخرى تتطلب أدوات أخرى. على سبيل المثال، يصبح GiST ذو صلة بالبحث الهندسي ونمط الجيران الأقرب، بينما يناسب GIN عادةً أنماط الوثائق والنصوص الكاملة بشكل أفضل بكثير.
تظهر تلك الاختلافات بسرعة:
CREATE INDEX articles_search_idx
ON articles
USING GIN (to_tsvector('english', title || ' ' || body));
هذا يحل مشكلة مختلفة عن B-tree بسيط على created_at.
العادة الهندسية التي تتوسع
لا تحفظ أنواع الفهارس الغريبة أولاً. احفظ سير العمل:
- افحص نمط الاستعلام
- افحص خطة التنفيذ
- اختر نوع الفهرس الذي يتناسب مع العمل الفعلي
هذا يحافظ على ربط الفهارس بالأدلة بدلاً من الخرافات.
قراءات إضافية