SQL Academy · درس

الفحص التسلسلي مقابل فحص الفهرس

تعرّف على الحالات التي يكون فيها الفحص التسلسلي مناسبًا، ومتى يلزم فحص الفهرس، وكيف يقرر المخطط ذلك

الدرس 2 من 413 خطوة

الفحص التسلسلي مقابل فحص الفهرس درس مجاني في SQL Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في SQL Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة SQL Academy 4 دروس في المجموع.

طريقتان للعثور على الصفوف

لدى قاعدة البيانات استراتيجيتان أساسيتان لقراءة الصفوف:

  • Sequential Scan — قراءة كل صفحة من صفحات الجدول
  • Index Scan — اجتياز فهرس وجلب الصفوف المطابقة

متى يكون Sequential Scan مناسبًا

إذا كنت تحتاج إلى معظم الجدول على أي حال، فستكون قراءة الجدول بأكمله أرخص من قراءة الفهرس ثم جلب كل صف مطابق. كقاعدة تقريبية: إذا تجاوزت النسبة نحو 10–20% من الصفوف، يفوز seq scan.

متى يفوز Index Scan

في الاستعلامات الانتقائية، التي تعيد نسبة صغيرة من الصفوف، يكون الفهرس مفيدًا:

EXPLAIN SELECT * FROM users WHERE id = 42;
-- Index Scan using users_pkey  (cost=0.43..8.45 rows=1)

EXPLAIN SELECT * FROM users WHERE active;
-- Seq Scan on users  (cost=0.00..15000.00 rows=950000)
-- (because most users are active)

الفرق بين Index Scan وIndex-Only Scan

أحيانًا يحتوي الفهرس وحده على جميع الأعمدة التي تحتاج إليها، فلا حاجة إلى جلب البيانات من الجدول. يُسمى ذلك Index-Only Scan:

CREATE INDEX users_email_id_idx ON users(id) INCLUDE (email);

EXPLAIN SELECT email FROM users WHERE id = 42;
-- Index Only Scan using users_email_id_idx

Bitmap Index Scan

عند الانتقائية المتوسطة، قد ينشئ PostgreSQL خريطة نقطية للصفوف المطابقة، ثم يجلبها بالترتيب الفعلي — وهذا أسرع من عمليات I/O العشوائية:

EXPLAIN SELECT * FROM orders WHERE status = 'pending';
-- Bitmap Heap Scan on orders
--   Recheck Cond: (status = 'pending')
--   -> Bitmap Index Scan on orders_status_idx

لماذا يختار المخطط Seq Scan

الأسباب الشائعة:

  • لا يوجد فهرس على العمود الذي تتم تصفيته
  • لا يمكن استخدام الفهرس، بسبب وجود دالة على العمود أو عبارات OR أو عدم تطابق الأنواع
  • عدد الصفوف المتوقع كبير جدًا بحيث لا يستحق استخدام الفهرس
  • الإحصاءات قديمة، ولذلك يخطئ المخطط في تقدير الانتقائية

فرض استخدام الفهرس بحذر

لا يمكنك إعطاء PostgreSQL تلميحًا مباشرًا. بدلًا من ذلك:

  • شغّل ANALYZE لتحديث الإحصاءات
  • أضف الفهرس المناسب
  • اضبط خيارات الجلسة: SET enable_seqscan = off; للتشخيص، وليس في بيئة الإنتاج

الشروط القابلة للفهرسة

لكي يكون الفهرس مفيدًا، يجب أن يكون شرط WHERE "قابلًا للاستخدام بواسطة الفهرس" (sargable)، أي أن يقارن العمود المفهرس مباشرةً:

-- GOOD:
WHERE created_at >= '2024-01-01'

-- BAD (function on the column):
WHERE date_trunc('day', created_at) = '2024-01-01'

-- BAD (cast):
WHERE created_at::DATE = '2024-01-01'

-- FIX: add a functional index, or rewrite with range.

ترتيب الفهرس المركب

يساعد الفهرس على (a, b) في الاستعلامات التي تستخدم a وحده أو a AND b، لكنه لا يساعد في الاستعلامات التي تستخدم b وحده.

حجم الفهرس مهم

قد يبقى فهرس B-tree ضيق ذو مفاتيح كثيرة الاستخدام بالكامل في الذاكرة، بينما قد لا يحدث ذلك مع فهرس عريض. الفهارس الأصغر أسرع.

تحقّق من الخطة

بعد إضافة فهرس، شغّل EXPLAIN ANALYZE للتأكد من أن المخطط يستخدمه فعليًا. وإن لم يكن كذلك، فابحث عن السبب.

مراجعة

يعتمد الاختيار بين الفحص التسلسلي وفحص الفهرس على الانتقائية.

  • مرشح انتقائي → فحص الفهرس
  • معظم الجدول → seq scan
  • الفحص النقطي للحالات المتوسطة
  • انتبه إلى قابلية استخدام الفهرس

تحقق سريع

لماذا قد يختار PostgreSQL الفحص التسلسلي بدلًا من فهرس موجود؟

البدء مجانًا

تعلم SQL مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
46
الدروس
183

الأسئلة الشائعة

هل درس «الفحص التسلسلي مقابل فحص الفهرس» مجاني؟

نعم — نص درس «الفحص التسلسلي مقابل فحص الفهرس» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة SQL Academy، انتقل إلى CoddyKit PRO. تتضمن دورة SQL Academy 4 دروس في المجموع.

ماذا ستتعلم في «الفحص التسلسلي مقابل فحص الفهرس»؟

تعرّف على الحالات التي يكون فيها الفحص التسلسلي مناسبًا، ومتى يلزم فحص الفهرس، وكيف يقرر المخطط ذلك تتمرن على SQL Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ SQL Academy؟

لا تُشترط خبرة سابقة. SQL Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «الفحص التسلسلي مقابل فحص الفهرس»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس SQL Academy هذا؟

نعم. كل درس في SQL Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. قراءة EXPLAIN وEXPLAIN ANALYZE
  2. الفحص التسلسلي مقابل فحص الفهرس
  3. Hash Join مقابل Merge Join مقابل Nested Loop
  4. تحديد الاستعلامات البطيئة وإصلاحها
← العودة إلى SQL Academy