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

การแสดง Query Plan ใน MongoDB ด้วยคำสั่ง explain()

วิเคราะห์ Query Plan ใน MongoDB ด้วย explain()

บทความนี้สาธิตการใช้คำสั่ง explain() ใน MongoDB เพื่อดูแผนการประมวลผลคิวรี่ (Query Execution Plan) ซึ่งช่วยในการวิเคราะห์ประสิทธิภาพและการใช้ดัชนี (Index)

ขั้นตอนที่ 1: สร้าง Collection และเพิ่มข้อมูลตัวอย่าง

สร้าง collection ชื่อ demo202 และเพิ่มเอกสาร 3 รายการ

> db.demo202.insertOne({"StudentFirstName":"Chris","StudentAge":21});
{ "acknowledged": true, "insertedId": ObjectId("5e3c3bd103d395bdc21346e8") }

> db.demo202.insertOne({"StudentFirstName":"David","StudentAge":23});
{ "acknowledged": true, "insertedId": ObjectId("5e3c3bd803d395bdc21346e9") }

> db.demo202.insertOne({"StudentFirstName":"Bob","StudentAge":22});
{ "acknowledged": true, "insertedId": ObjectId("5e3c3bde03d395bdc21346ea") }

ขั้นตอนที่ 2: แสดงข้อมูลทั้งหมด

> db.demo202.find();

ผลลัพธ์:

{ "_id": ObjectId("5e3c3bd103d395bdc21346e8"), "StudentFirstName": "Chris", "StudentAge": 21 }
{ "_id": ObjectId("5e3c3bd803d395bdc21346e9"), "StudentFirstName": "David", "StudentAge": 23 }
{ "_id": ObjectId("5e3c3bde03d395bdc21346ea"), "StudentFirstName": "Bob", "StudentAge": 22 }

ขั้นตอนที่ 3: ใช้ explain() เพื่อดู Query Plan

รันคิวรี่ค้นหา StudentFirstName: "David" พร้อม explain()

> db.demo202.find({"StudentFirstName":"David"}).explain();

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

{
    "queryPlanner": {
        "plannerVersion": 1,
        "namespace": "test.demo202",
        "indexFilterSet": false,
        "parsedQuery": {
            "StudentFirstName": { "$eq": "David" }
        },
        "winningPlan": {
            "stage": "COLLSCAN",
            "filter": { "StudentFirstName": { "$eq": "David" } },
            "direction": "forward"
        },
        "rejectedPlans": []
    },
    "serverInfo": {
        "host": "DESKTOP-QN2RB3H",
        "port": 270017,
        "version": "4.0.5"
    },
    "ok": 1
}

การอธิบาย:

  • stage: "COLLSCAN" - หมายถึงการสแกนทั้ง Collection (Collection Scan) เพราะไม่มีดัชนีสำหรับฟิลด์ StudentFirstName
  • filter - เงื่อนไขที่ใช้กรองข้อมูล
  • rejectedPlans: [] - ไม่มีแผนอื่นที่ถูกพิจารณา

คำแนะนำ: หากคิวรี่นี้รันบ่อย ควรสร้างดัชนี (Index) บนฟิลด์ StudentFirstName เพื่อเปลี่ยนจาก COLLSCAN เป็น IXSCAN (Index Scan) ซึ่งจะเร็วกว่ามาก