เริ่มต้นด้วย MongoDB เวอร์ชัน 3.0 เพียงแค่เปลี่ยนลำดับจาก
collection.aggregate(...).explain()
ถึง
collection.explain().aggregate(...)
จะให้ผลลัพธ์ที่ต้องการ (เอกสารที่นี่ )
สำหรับเวอร์ชันเก่า> = 2.6 คุณจะต้องใช้explain
ตัวเลือกสำหรับการดำเนินการไปป์ไลน์การรวม
explain:true
db.collection.aggregate([
{ $project : { "Tags._id" : 1 }},
{ $unwind : "$Tags" },
{ $match: {$or: [{"Tags._id":"tag1"},{"Tags._id":"tag2"}]}},
{ $group: {
_id : "$_id",
count: { $sum:1 }
}},
{$sort: {"count":-1}}
],
{
explain:true
}
)
การพิจารณาที่สำคัญกับการรวมกรอบคือการที่ดัชนีเท่านั้นที่สามารถใช้ในการดึงข้อมูลเบื้องต้นสำหรับท่อ (เช่นการใช้งานของ $match
, $sort
, $geonear
ที่จุดเริ่มต้นของท่อที่) เช่นเดียวกับที่ตามมา $lookup
และ$graphLookup
ขั้นตอน เมื่อได้รับข้อมูลที่ลึกซึ้งลงไปในท่อรวมสำหรับการประมวลผล (เช่นผ่านขั้นตอนเช่น$project
, $unwind
และ$group
) การจัดการต่อไปจะอยู่ในหน่วยความจำ (อาจจะใช้ไฟล์ชั่วคราวถ้าallowDiskUse
ตัวเลือกเป็นชุด)
การเพิ่มประสิทธิภาพไปป์ไลน์
โดยทั่วไปคุณสามารถเพิ่มประสิทธิภาพไปป์ไลน์การรวมโดย:
- การเริ่มต้นไปป์ไลน์โดยมี
$match
ขั้นตอนเพื่อ จำกัด การประมวลผลเอกสารที่เกี่ยวข้อง
- การดูแลให้การเริ่มต้น
$match
/ $sort
ขั้นตอนการได้รับการสนับสนุนโดยดัชนีที่มีประสิทธิภาพ
- การกรองข้อมูลในช่วงต้นใช้
$match
, และ$limit
$skip
- ลดขั้นตอนที่ไม่จำเป็นและการจัดการเอกสาร (อาจพิจารณาสคีมาของคุณใหม่หากจำเป็นต้องใช้ยิมนาสติกแบบรวมที่ซับซ้อน)
- ใช้ประโยชน์จากตัวดำเนินการรวมรุ่นใหม่หากคุณอัพเกรดเซิร์ฟเวอร์ MongoDB ของคุณ ตัวอย่างเช่น MongoDB 3.4 ได้เพิ่มขั้นตอนการรวมและนิพจน์ใหม่ๆ มากมายรวมถึงการสนับสนุนการทำงานกับอาร์เรย์สตริงและแง่มุม
นอกจากนี้ยังมีAggregation Pipeline Optimizations จำนวนหนึ่งที่เกิดขึ้นโดยอัตโนมัติขึ้นอยู่กับเวอร์ชันเซิร์ฟเวอร์ MongoDB ของคุณ ตัวอย่างเช่นขั้นตอนที่อยู่ติดกันอาจรวมกันและ / หรือจัดลำดับใหม่เพื่อปรับปรุงการดำเนินการโดยไม่ส่งผลต่อผลลัพธ์ของผลลัพธ์
ข้อ จำกัด
สำหรับ MongoDB 3.4 explain
อ็อพชันAggregation Framework จะให้ข้อมูลเกี่ยวกับวิธีการประมวลผลไปป์ไลน์ แต่ไม่สนับสนุนรายละเอียดระดับเดียวกับexecutionStats
โหมดสำหรับfind()
คิวรี หากคุณกำลังมุ่งเน้นไปที่การเพิ่มประสิทธิภาพการดำเนินการแบบสอบถามครั้งแรกคุณอาจจะพบว่ามันเป็นประโยชน์ต่อการตรวจสอบเทียบเท่าfind().explain()
แบบสอบถามexecutionStats
หรือallPlansExecution
ฟุ่มเฟื่อย
มีคำขอคุณสมบัติที่เกี่ยวข้องสองสามรายการเพื่อรับชม / โหวตในตัวติดตามปัญหา MongoDB เกี่ยวกับสถิติการดำเนินการโดยละเอียดเพิ่มเติมเพื่อช่วยเพิ่มประสิทธิภาพ / โปรไฟล์ไปป์ไลน์การรวม: