Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

การทำความเข้าใจ Query Plan ใน MongoDB ด้วย explain()

วิเคราะห์แผนการดำเนินการคิวรีด้วย explain()

เมธอด explain() ให้ข้อมูลรายละเอียดเกี่ยวกับวิธีที่ MongoDB ดำเนินการคิวรี รวมถึงการใช้ดัชนี จำนวนเอกสารที่สแกน และแผนการทำงานที่เลือก

ตัวอย่างข้อมูลและสร้างดัชนี

> db.demo408.insertOne({ "Value": 50 });
> db.demo408.insertOne({ "Value": 20 });
> db.demo408.insertOne({ "Value": 45 });
> db.demo408.insertOne({ "Value": 35 });
> db.demo408.createIndex({ Value: 1 });

แสดงข้อมูลทั้งหมด

> db.demo408.find();

คำสั่งดู Query Plan สำหรับคิวรี Value > 40

> db.demo408.explain().find({ Value: { $gt: 40 } });

ผลลัพธ์ Query Plan (สำคัญ)

{
  "queryPlanner": {
    "plannerVersion": 1,
    "namespace": "test.demo408",
    "winningPlan": {
      "stage": "FETCH",
      "inputStage": {
        "stage": "IXSCAN",
        "keyPattern": { "Value": 1 },
        "indexName": "Value_1",
        "isMultiKey": false,
        "direction": "forward",
        "indexBounds": { "Value": ["(40.0, inf.0]"] }
      }
    },
    "rejectedPlans": []
  },
  "serverInfo": { ... },
  "ok": 1
}

ส่วนสำคัญใน Query Plan

  • winningPlan.stage: "FETCH": ดึงเอกสารหลังจากสแกนดัชนี
  • inputStage.stage: "IXSCAN": ใช้ Index Scan (ดี) ไม่ใช่ COLLSCAN (Collection Scan)
  • indexName: "Value_1": ชื่อดัชนีที่ใช้
  • indexBounds: ช่วงค่าที่ดัชนีสแกน (ในที่นี้คือ > 40)
  • rejectedPlans: []: ไม่มีแผนอื่นที่ถูกพิจารณา

โหมด explain อื่นๆ

  • explain("queryPlanner"): แผนการที่จะใช้ (default)
  • explain("executionStats"): รวมสถิติการทำงานจริง (nReturned, executionTimeMillis, totalKeysExamined, totalDocsExamined)
  • explain("allPlansExecution"): รายละเอียดทุกแผนที่ถูกพิจารณา

ตัวชี้วัดประสิทธิภาพสำคัญ

  • totalKeysExamined: จำนวนคีย์ดัชนีที่อ่าน
  • totalDocsExamined: จำนวนเอกสารที่อ่าน
  • executionTimeMillis: เวลาที่ใช้ (ms)
  • อุดมคติ: totalDocsExamined ≈ nReturned แสดงว่าคิวรีมีประสิทธิภาพ