0Pricing
SQL Academy · درس

الفحص باستخدام الفهرس فقط وخريطة الرؤية

فعّل عمليات الفحص باستخدام الفهرس فقط عبر تغطية الاستعلامات والحفاظ على تحديث خريطة الرؤية

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

ما هو الفحص باستخدام الفهرس فقط؟

يعيد بحث الفهرس عادةً معرّفات الصفوف (TIDs)، ثم يجب الوصول إلى الجدول لقراءة الصف الفعلي. أما الفحص باستخدام الفهرس فقط فيجيب عن الاستعلام باستخدام الفهرس وحده — دون زيارة heap. وهذا أسرع بكثير.

الشروط

يتطلب الفحص باستخدام الفهرس فقط ما يلي:

  • يجب أن تكون جميع الأعمدة المحددة في SELECT موجودة في الفهرس
  • يجب وضع علامة "all visible" على صفحة الصف في visibility map

خريطة الرؤية

هي صورة نقطية لكل صفحة في الجدول: تعني البتات المضبوطة أن "جميع الصفوف في هذه الصفحة مرئية لجميع المعاملات". ويحافظ VACUUM عليها. ومن دونها، يجب على PostgreSQL زيارة heap للتحقق من الرؤية.

اجعل الاستعلام يستخدم الفهرس فقط

غطِّ جميع الأعمدة المطلوبة:

-- Query:
SELECT id, email FROM users WHERE id = 42;

-- Without an index on (id, email), only an Index Scan that visits the heap is possible.
-- With this:
CREATE INDEX users_id_email_idx ON users (id, email);
-- Or better:
CREATE INDEX users_id_email_idx ON users (id) INCLUDE (email);
-- The query can be index-only.

INCLUDE

فهرس تغطية يضم أعمدة غير مفتاحية (في PG 11 والإصدارات الأحدث). يُخزّن العمود في الأوراق، لكنه لا يُستخدم للترتيب — لذلك لا يؤثر في تكلفة الإدراج:

CREATE INDEX users_id_idx ON users(id) INCLUDE (email, full_name);

SELECT id, email, full_name FROM users WHERE id = 42;
-- Index-only scan if visibility map allows.

لماذا قد يزور heap رغم ذلك

بعد عمليات الكتابة المكثفة، قد تصبح visibility map قديمة. شغّل VACUUM (من دون FULL) لتحديثها.

VACUUM (VERBOSE) users;
-- "scanned X pages, X of which are visible"
-- More visible pages = more Index-Only Scans possible.

التحقق من الفحص باستخدام الفهرس فقط

يكشف EXPLAIN ذلك:

EXPLAIN ANALYZE
SELECT id, email FROM users WHERE id = 42;
--  Index Only Scan using users_id_email_idx on users
--    Index Cond: (id = 42)
--    Heap Fetches: 0       ← key number

ماذا تخبرك Heap Fetches

‏"Heap Fetches: 0" — ممتاز، فجميع البيانات أُخذت من الفهرس. أما ‏"Heap Fetches: N" فتعني أن N من الصفوف احتاجت إلى زيارة heap (لم تكن بتة visibility map مضبوطة). وبعد تشغيل autovacuum، ينخفض عدد Heap Fetches عادةً.

متى تستخدم INCLUDE بدلاً من الفهرس المركب

  • استخدم INCLUDE للأعمدة التي تحددها في SELECT فقط (ولا تستخدمها للتصفية أو الترتيب)
  • استخدم الفهرس المركب (المفتاح) عندما تصفّي العمود أو ترتّب به أيضاً

يحافظ INCLUDE على ضيق الفهرس ويجعل عمليات الكتابة أسرع.

يضر تضخم الفهرس بالفحص باستخدام الفهرس فقط

تحتوي الفهارس المتضخمة على صفحات أكثر، ولذلك تقرأ عمليات الفحص باستخدام الفهرس فقط صفحات أكثر أيضاً. حافظ على تنفيذ vacuum للفهرسة وأعد فهرستها عندما يزداد التضخم.

لا تغطِّ كل شيء

تؤدي إضافة عدد كبير جداً من الأعمدة إلى الفهرس إلى إبطاء عمليات الكتابة وجعل الفهرس ضخماً. غطِّ مسارات القراءة كثيرة الاستخدام فقط.

طرق العرض المادية كغطاء

إذا أردت سرعة قراءة فائقة لتقرير محدد، فإن طريقة العرض المادية مع فهرس تُعد عملياً "فهرس تغطية" يضم أعمدة محسوبة عشوائياً.

مراجعة

الفحص باستخدام الفهرس فقط = أسرع مسار للقراءة.

  • يجب أن تكون جميع الأعمدة المحددة موجودة في الفهرس
  • تضيف INCLUDE الأعمدة غير المفتاحية بتكلفة منخفضة
  • يجب أن تشير visibility map إلى "all visible" — ويحافظ VACUUM على حداثتها
  • في EXPLAIN: الهدف هو Heap Fetches: 0

تحقق سريع

ترى Heap Fetches: 100,000 في EXPLAIN رغم وجود عقدة Index Only Scan. ما الإصلاح المعتاد؟

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

هل درس «الفحص باستخدام الفهرس فقط وخريطة الرؤية» مجاني؟

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

ماذا ستتعلم في «الفحص باستخدام الفهرس فقط وخريطة الرؤية»؟

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

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

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

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

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

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

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

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

  1. MVCC وأسباب التضخم
  2. VACUUM وautovacuum وvacuum_cost_delay
  3. ANALYZE وpg_statistic
  4. الفحص باستخدام الفهرس فقط وخريطة الرؤية
← العودة إلى SQL Academy