0Pricing
SQL Academy · درس

قراءة EXPLAIN وEXPLAIN ANALYZE

اقرأ شجرة الخطة، وافهم الفرق بين التكلفة والوقت الفعلي، وحدد العقد الثقيلة

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

لماذا نستخدم EXPLAIN؟

تُظهر EXPLAIN استراتيجية المخطط لتنفيذ الاستعلام — من دون تشغيله. أما EXPLAIN ANALYZE فتشغّل الاستعلام وتعرض أيضاً الأزمنة الفعلية.

EXPLAIN الأساسي

اعرض الخطة المقدّرة:

EXPLAIN SELECT * FROM orders WHERE user_id = 42;
--                            QUERY PLAN
-- ---------------------------------------------------------------
-- Index Scan using orders_user_id_idx on orders
--   (cost=0.43..8.45 rows=5 width=120)
--   Index Cond: (user_id = 42)

EXPLAIN ANALYZE

تشغّل الاستعلام وتضيف الأزمنة الفعلية وأعداد الصفوف:

EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 42;
-- Index Scan using orders_user_id_idx on orders
--   (cost=0.43..8.45 rows=5 width=120)
--   (actual time=0.041..0.043 rows=4 loops=1)
-- Planning Time: 0.082 ms
-- Execution Time: 0.057 ms

قراءة الشجرة

الخطط عبارة عن أشجار. وتشير المسافة البادئة إلى العقدة التابعة. وتُنفَّذ العقد التابعة قبل العقد الأصلية.

Aggregate
  -> Hash Join
     Hash Cond: (o.user_id = u.id)
     -> Seq Scan on orders
     -> Hash
        -> Seq Scan on users

التكلفة مقابل الزمن

يحتوي العمود cost على رقمين: startup_cost..total_cost. وهذه أرقام اعتباطية بوحدات المخطط، وليست ثواني. استخدم actual time للقيم الفعلية.

rows = تقديري؛ actual rows = فعلي

تمثل rows تخمين المخطط، بينما تمثل actual rows ما حدث فعلاً. وإذا اختلفت القيمتان كثيراً، فالإحصاءات غير دقيقة.

التكرارات تضاعف الزمن

في الحلقات المتداخلة، تعني actual time=X loops=N أن كل تكرار استغرق X؛ وبالتالي يكون الإجمالي لكل عقدة هو X×N.

Nested Loop  (actual time=0.05..2.03 rows=500)
  -> Seq Scan on orders  (actual ... loops=1)
  -> Index Scan using users_pkey  (actual time=0.01..0.01 loops=500)

BUFFERS يخبرك عن I/O

يعرض EXPLAIN (ANALYZE, BUFFERS) مرات إصابة المخزن المؤقت وعمليات القراءة — أي عمليات I/O الكامنة وراء أزمنة التنفيذ:

EXPLAIN (ANALYZE, BUFFERS) SELECT ...;
-- Buffers: shared hit=12 read=4

خيارات FORMAT

للمعالجة البرمجية، استخدم JSON أو YAML:

EXPLAIN (ANALYZE, FORMAT JSON) SELECT ...;

لا تستخدم EXPLAIN ANALYZE مع العبارات المدمرة

يؤدي استخدام EXPLAIN ANALYZE مع UPDATE أو DELETE أو INSERT إلى تنفيذ العبارة فعليًا. ضعها داخل معاملة واستخدم ROLLBACK إذا أردت فحصها من دون تثبيت التغييرات:

BEGIN;
EXPLAIN ANALYZE DELETE FROM orders WHERE ...;
ROLLBACK;

عُقد الخطة الشائعة

  • Seq Scan — يقرأ الجدول بأكمله
  • Index Scan — يستخدم فهرسًا
  • Bitmap Heap Scan — يدمج عدة فهارس
  • Hash Join / Merge Join / Nested Loop — استراتيجيات الربط
  • Sort وAggregate وLimit وMaterialize

آلية قراءة الخطة

  1. شغّل EXPLAIN ANALYZE على الاستعلام البطيء
  2. حدّد العقدة ذات أعلى قيمة في actual time
  3. قارن بين rows المقدّرة وactual rows
  4. تحقّق مما إذا كانت الفهارس مستخدمة
  5. كرّر العملية: أضف فهرسًا أو أعد كتابة الاستعلام أو شغّل ANALYZE

مراجعة

يُعد EXPLAIN ANALYZE أداتك الأساسية لتحسين الأداء.

  • التكلفة نسبية، أما الزمن ففعلي
  • يكشف الفرق بين الصفوف المقدّرة والفعلية عن مشكلات الإحصاءات
  • يوضح BUFFERS عمليات I/O
  • ضع الاستعلامات المدمرة داخل BEGIN؛ ... ROLLBACK

تحقق سريع

ما الفرق بين EXPLAIN وEXPLAIN ANALYZE؟

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

هل درس «قراءة EXPLAIN وEXPLAIN ANALYZE» مجاني؟

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

ماذا ستتعلم في «قراءة EXPLAIN وEXPLAIN ANALYZE»؟

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

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

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

كم من الوقت يستغرق درس «قراءة EXPLAIN وEXPLAIN ANALYZE»؟

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

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

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

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

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