explain() (شرح خطة التنفيذ)
آخر تحديث: 2026-10-09
explain() (شرح خطة التنفيذ)
تكشف explain() خطة تنفيذ الاستعلام: `db.users.find({ age: { $gt: 20 } }).explain('executionStats')`. تعرض النتيجة استخدام الفهرس والمستندات المفحوصة والتوقيت — الأدوات الأساسية لضبط الأداء. يمكن أن يكون الوسيط 'queryPlanner' (الافتراضي، الخطة فقط)، أو 'executionStats' (إحصائيات تنفيذ فعلية)، أو 'allPlansExecution' (كل خطط المرشح).
| الفئة | المؤشر |
|---|---|
| إصدار MongoDB | 1.0+ |
| لغة المثال | mongosh (الطرفية) |
📝 الصيغة
db.<collection>.find(<filter>).explain(<verbosity>)
⚙️ المعلمات
| الوضع | اختياري. 'queryPlanner' أو 'executionStats' أو 'allPlansExecution'. |
|---|
القيمة المرجعة:مستند يحتوي على خطة التنفيذ والإحصاءات.
▶ مثال
نفّذ الأوامر التالية في mongosh المحلي لديك (يتطلب تشغيل mongod):
// explain: التحقق هل يستخدم استعلام age فهرسًا
const plan = db.users.find({ age: { $gt: 20 } })
.explain('executionStats')
print('Docs examined: ' + plan.executionStats.totalDocsExamined)
المخرجات:
Docs examined: 1000
📌 ملاحظات
- totalDocsExamined أعلى بكثير من عدد النتائج يشير إلى فهرس مفقود
- winningPlan يعرض الخطة الفعلية التي استقر عليها المحسِّن
- explain() تُعيد معلومات الخطة وليس البيانات الفعلية
🏷️ وسوم ذات صلة
💡 حالات ذات صلة
أساسيات ومبادئ الفهرسة
أنواع الفهارس والميزات المتقدمة
$lookup والارتباطات مع مجموعات متعددة
تحسين الأداء ومراقبته: ضبط الأداء على مستوى الإنتاج
التجزئة: التوسع الأفقي
📚 دروس ذات صلة
❓ الأسئلة الشائعة
Qكيف أعرف هل يستخدم الاستعلام فهرسًا؟
Aافحص winningPlan: IXSCAN تعني استخدام فهرس، وCOLLSCAN تعني فحص المجموعة بالكامل.
Qما الاختلافات بين أوضاع explain الثلاثة؟
AqueryPlanner يعرض الخطة فقط وهو الأسرع؛ executionStats يضيف إحصائيات التنفيذ الفعلية؛ allPlansExecution يفصّل كل خطط المرشح.
Qهل تشغّل explain الاستعلام فعلًا؟
Aتنفّذه فعلًا (ما عدا في وضع queryPlanner) — الإحصائيات من تشغيل حقيقي، لكن لا تُعاد أي مستندات.