ดัชนีใน MongoDB (MongoDB Indexes)
บทนำ
ดัชนี (Indexes) ใน MongoDB เป็นโครงสร้างข้อมูลที่ช่วยเพิ่มประสิทธิภาพในการสืบค้นข้อมูล ดัชนีช่วยลดเวลาที่ใช้ในการดึงข้อมูล โดยการชี้ไปยังข้อมูลที่ต้องการโดยตรง แทนที่จะต้องสแกนผ่านเอกสารทั้งหมดในคอลเลคชัน
ประเภทของดัชนีใน MongoDB
1. Single Field Index
ดัชนีที่สร้างบนฟิลด์เดียว เหมาะสำหรับการสืบค้นข้อมูลที่มีฟิลด์เฉพาะ
// การสร้างดัชนีบนฟิลด์ "name"
db.collection.createIndex({ name: 1 });
2. Compound Index
ดัชนีที่สร้างบนหลายฟิลด์ เหมาะสำหรับการสืบค้นข้อมูลที่ต้องใช้ฟิลด์หลายฟิลด์ร่วมกัน
// การสร้างดัชนีบนฟิลด์ "firstName" และ "lastName"
db.collection.createIndex({ firstName: 1, lastName: 1 });
3. Multikey Index
ดัชนีที่สร้างบนฟิลด์ที่มีค่าเป็นอาเรย์ ช่วยเพิ่มประสิทธิภาพในการสืบค้นข้อมูลในอาเรย์
// การสร้างดัชนีบนฟิลด์ "tags" ที่เป็นอาเรย์
db.collection.createIndex({ tags: 1 });
4. Text Index
ดัชนีที่ใช้สำหรับการค้นหาข้อความแบบเต็มรูปแบบ (Full-Text Search)
// การสร้างดัชนีข้อความบนฟิลด์ "description"
db.collection.createIndex({ description: "text" });
5. Geospatial Index
ดัชนีที่ใช้สำหรับการค้นหาข้อมูลเชิงพื้นที่ (Geospatial Data)
- 2D Index สำหรับข้อมูลที่ใช้พิกัดแบบสองมิติ
db.collection.createIndex({ location: "2d" }); - 2DSphere Index สำหรับข้อมูลพิกัดแบบทรงกลม
db.collection.createIndex({ location: "2dsphere" });
6. Hashed Index
ดัชนีที่ใช้แฮชค่าของฟิลด์ เหมาะสำหรับการกระจายข้อมูลอย่างสม่ำเสมอ
// การสร้างดัชนีแฮชบนฟิลด์ "userId"
db.collection.createIndex({ userId: "hashed" });
การจัดการดัชนี
1. แสดงดัชนีทั้งหมดในคอลเลคชัน
// แสดงรายการดัชนีทั้งหมด
db.collection.getIndexes();
2. ลบดัชนี
- ลบดัชนีเฉพาะ:
db.collection.dropIndex("index_name"); - ลบดัชนีทั้งหมดในคอลเลคชัน:
db.collection.dropIndexes();
3. ตรวจสอบประสิทธิภาพของดัชนี
MongoDB มีเครื่องมือ explain() ที่ช่วยวิเคราะห์ Query และดูว่าดัชนีถูกใช้งานหรือไม่
// ตรวจสอบ Query
const result = db.collection.find({ name: "John" }).explain("executionStats");
printjson(result);
การเพิ่มประสิทธิภาพด้วยดัชนี
1. เลือกฟิลด์ที่เหมาะสม
เลือกฟิลด์ที่ใช้ในการสืบค้นบ่อยที่สุดและมีข้อมูลที่หลากหลาย
2. หลีกเลี่ยงการสร้างดัชนีมากเกินไป
ดัชนีที่มากเกินไปอาจทำให้การเขียนข้อมูลช้าลง
3. ใช้ Compound Index อย่างเหมาะสม
ควรจัดลำดับฟิลด์ใน Compound Index ตามลำดับที่ใช้ใน Query
ตัวอย่างการใช้งานดัชนี
สร้างคอลเลคชันตัวอย่าง
// เพิ่มเอกสารในคอลเลคชัน
const data = [
{ name: "Alice", age: 25, location: [40.7128, -74.0060] },
{ name: "Bob", age: 30, location: [34.0522, -118.2437] },
{ name: "Charlie", age: 35, location: [51.5074, -0.1278] }
];
data.forEach(doc => db.users.insertOne(doc));
การสร้างดัชนี
// สร้างดัชนี
// 1. ดัชนีบนฟิลด์ "name"
db.users.createIndex({ name: 1 });
// 2. ดัชนีเชิงพื้นที่บนฟิลด์ "location"
db.users.createIndex({ location: "2dsphere" });
การสืบค้นข้อมูล
// สืบค้นข้อมูลผู้ใช้ที่ชื่อ "Alice"
db.users.find({ name: "Alice" });
// สืบค้นผู้ใช้ที่อยู่ในพื้นที่เฉพาะ
const query = {
location: {
$near: {
$geometry: {
type: "Point",
coordinates: [40.7128, -74.0060]
},
$maxDistance: 10000
}
}
};
db.users.find(query);
บทสรุป
การใช้งานดัชนีใน MongoDB ช่วยให้การสืบค้นข้อมูลมีประสิทธิภาพมากขึ้น อย่างไรก็ตาม ควรใช้ดัชนีอย่างระมัดระวังเพื่อไม่ให้กระทบต่อประสิทธิภาพการเขียนข้อมูล การทำความเข้าใจประเภทและการจัดการดัชนีจะช่วยเพิ่มประสิทธิภาพของระบบได้อย่างมาก