การสร้างดัชนี (Index) เป็นวิธีหลักในการเพิ่มประสิทธิภาพและลดเวลาการรันคำสั่ง Query ใน MongoDB โดยเฉพาะการสร้าง Unique Index
ตัวอย่างสร้าง Unique Index บนฟิลด์ LastName
> db.demo193.createIndex({"LastName": 1}, {unique: true});
{ "createdCollectionAutomatically": true, "numIndexesBefore": 1, "numIndexesAfter": 2, "ok": 1 }
เพิ่มข้อมูลทดสอบ
> db.demo193.insertOne({"FirstName": "John", "LastName": "Doe"});
{ "acknowledged": true, "insertedId": ObjectId("5e3ade1803d395bdc21346d1") }
> db.demo193.insertOne({"FirstName": "John", "LastName": "Smith"});
{ "acknowledged": true, "insertedId": ObjectId("5e3ade1f03d395bdc21346d2") }
> db.demo193.insertOne({"FirstName": "David", "LastName": "Miller"});
{ "acknowledged": true, "insertedId": ObjectId("5e3ade2803d395bdc21346d3") }
แสดงข้อมูลทั้งหมด
> db.demo193.find();
ผลลัพธ์
{
"_id": ObjectId("5e3ade1803d395bdc21346d1"),
"FirstName": "John",
"LastName": "Doe"
}
{
"_id": ObjectId("5e3ade1f03d395bdc21346d2"),
"FirstName": "John",
"LastName": "Smith"
}
{
"_id": ObjectId("5e3ade2803d395bdc21346d3"),
"FirstName": "David",
"LastName": "Miller"
}
ค้นหาด้วยเงื่อนไข LastName = "Smith" (ใช้ Index)
> db.demo193.find({"LastName": "Smith"});
ผลลัพธ์
{
"_id": ObjectId("5e3ade1f03d395bdc21346d2"),
"FirstName": "John",
"LastName": "Smith"
}
แนวทางปรับปรุงประสิทธิภาพ Query เพิ่มเติม:
- สร้าง Compound Index สำหรับคิวรีที่มีหลายเงื่อนไข
- ใช้
explain("executionStats")วิเคราะห์แผนการรันคิวรี - หลีกเลี่ยงการใช้
$regexนำหน้าสตริง (leading wildcard) - จำกัดฟิลด์ที่คืนค่าด้วย Projection
- ใช้
hint() บังคับให้ใช้ดัชนีเฉพาะเมื่อจำเป็น