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