تخطَّ إلى المحتوى

explain()

تحليل خطّة تنفيذ الاستعلام explain()

explain() ترجع تفاصيل عن كيفية تنفيذ MongoDB لاستعلام معيّن فعليًّا — هل استخدم فهرسًا أم فحص كل المستندات.

أداة التشخيص الأساسية عند بطء استعلام. تُستدعى على cursor (بعد find() أو aggregate()) وترجع خطّة التنفيذ: نوع المسح المستخدم، عدد المستندات المفحوصة، والزمن المستغرق.

الصياغة

db.collection.find(<filter>).explain(<verbosity>)

📄 مثال

db.orders.find({ customerId: 42 }).explain("executionStats")

// ابحث في المخرجات عن:
// winningPlan.stage: "IXSCAN" → استخدم فهرسًا (جيد)
// winningPlan.stage: "COLLSCAN" → فحص كل المجموعة (بطيء)

أهم المعاملات

المعاملالوظيفة
"queryPlanner"الخطّة المختارة فقط، بلا تنفيذ فعلي (افتراضي)
"executionStats"الخطّة + إحصاءات تنفيذ فعلي (عدد المستندات المفحوصة، الزمن)
"allPlansExecution"كل الخطط المرشَّحة التي قارن بينها المحسِّن

💡 نصائح عملية

  • قارن totalDocsExamined بـ nReturned — إن كان الأول أكبر بكثير من الثاني، الاستعلام يفحص مستندات كثيرة زيادة عن الحاجة ويحتاج فهرسًا أفضل

⚠️ أخطاء شائعة

  • قراءة queryPlanner فقط وتجاهل executionStats — الأول يظهر الخطّة النظرية، والثاني يظهر ماذا حدث فعليًّا عند التنفيذ

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار MONGODB الكامل بالعربي.

📚 للتعمق التقني الكامل بالإنجليزية: MDN Web Docs