MongoDB การสร้างดัชนี: createIndex() และ dropIndex()
⚡ สรุปอย่างชาญฉลาด
MongoDB ดัชนีจะจัดเก็บชุดย่อยที่เรียงลำดับของฟิลด์ในคอลเลกชัน เพื่อให้การค้นหาสามารถค้นหาเอกสารได้โดยไม่ต้องสแกนทุกระเบียน เมธอด createIndex, getIndexes และ dropIndex จะสร้าง แสดงรายการ และลบโครงสร้างที่สำคัญต่อประสิทธิภาพเหล่านี้

สิ่งที่เป็น MongoDB ดัชนี?
ดัชนีมีความสำคัญมากในทุกฐานข้อมูลและด้วย MongoDB มันก็ไม่ต่างกัน ด้วยการใช้ดัชนี การดำเนินการค้นหาใน MongoDB มีประสิทธิภาพมากขึ้น
หากคุณมีชุดเอกสารหลายพันฉบับโดยไม่มีดัชนี และคุณต้องการค้นหาเอกสารบางฉบับ ในกรณีเช่นนี้ MongoDB จะต้องสแกนทั้งคอลเลกชันเพื่อค้นหาเอกสาร แต่ถ้าคุณมีดัชนี MongoDB จะใช้ดัชนีเหล่านี้เพื่อจำกัดจำนวนเอกสารที่ต้องค้นหาในคอลเลกชัน
ดัชนีเป็นชุดข้อมูลพิเศษที่จัดเก็บข้อมูลเพียงบางส่วนจากชุดข้อมูลทั้งหมด เนื่องจากข้อมูลเป็นเพียงบางส่วน จึงทำให้การอ่านข้อมูลนั้นง่ายขึ้น ชุดข้อมูลบางส่วนนี้จะจัดเก็บค่าของฟิลด์เฉพาะ หรือชุดของฟิลด์ โดยเรียงลำดับตามค่าของฟิลด์นั้น
การทำความเข้าใจผลกระทบของดัชนี
แม้ว่าในเบื้องต้นจะแสดงให้เห็นว่าดัชนีมีประโยชน์ต่อการค้นหาข้อมูล แต่การมีดัชนีมากเกินไปอาจทำให้การทำงานอื่นๆ เช่น การแทรก การลบ และการอัปเดตข้อมูลช้าลงได้
หากมีการดำเนินการเพิ่ม ลบ และอัปเดตเอกสารบ่อยครั้ง ดัชนีก็จะต้องเปลี่ยนแปลงบ่อยเช่นกัน ซึ่งจะทำให้เกิดภาระเพิ่มขึ้นสำหรับระบบจัดเก็บข้อมูล
ตัวอย่างด้านล่างแสดงให้เห็นว่าค่าฟิลด์ใดบ้างที่สามารถใช้เป็นดัชนีในชุดข้อมูลได้ ดัชนีอาจสร้างขึ้นจากฟิลด์เดียวในชุดข้อมูล หรืออาจสร้างขึ้นจากหลายฟิลด์ในชุดข้อมูลก็ได้
ในตัวอย่างด้านล่าง Employeeid คือ “1” และ EmployeeCode “AA” ใช้สำหรับจัดทำดัชนีเอกสารในชุดเอกสาร ดังนั้นเมื่อมีการค้นหาด้วยคำค้นหา ดัชนีเหล่านี้จะถูกนำมาใช้เพื่อค้นหาเอกสารที่ต้องการในชุดเอกสารได้อย่างรวดเร็วและมีประสิทธิภาพ
ดังนั้นแม้ว่าคำค้นหาจะอิงตามพนักงานก็ตามCode “AA” เอกสารนั้นจะถูกส่งคืน
วิธีการสร้างดัชนี: createIndex()
การสร้างดัชนีใน MongoDB ทำได้โดยใช้ createIndex วิธี
ตัวอย่างต่อไปนี้แสดงวิธีการเพิ่มดัชนีลงในคอลเลกชัน สมมติว่าเรามีคอลเลกชันพนักงาน (Employee) เดิม ซึ่งมีชื่อฟิลด์ว่า “Employeeid” และ “EmployeeName”
db.Employee.createIndex({Employeeid:1})
Code คำอธิบาย:
- การขอ createIndex วิธีการใช้เพื่อสร้างดัชนีตาม “Employeeid” ของเอกสาร
- พารามิเตอร์ “1” ระบุว่าเมื่อสร้างดัชนีโดยใช้ค่าฟิลด์ “Employeeid” ค่าเหล่านั้นควรเรียงลำดับจากน้อยไปมาก โปรดทราบว่านี่แตกต่างจากฟิลด์ _id (ซึ่งระบุเอกสารแต่ละฉบับได้อย่างเฉพาะเจาะจง) MongoDB สร้างโดยอัตโนมัติ เอกสารจะถูกจัดเรียงตาม Employeeid ไม่ใช่ตามฟิลด์ _id อีกต่อไป
หากดำเนินการคำสั่งสำเร็จ จะแสดงผลลัพธ์ดังต่อไปนี้:
Output:
- ค่า numIndexesBefore: 1 บ่งชี้จำนวนค่าฟิลด์ในดัชนีก่อนที่จะเรียกใช้คำสั่ง แต่ละคอลเลกชันจะมีฟิลด์ _id ซึ่งนับเป็นค่าฟิลด์ด้วย ดังนั้น numIndexesBefore จึงเท่ากับ 1
- ค่า numIndexesAfter: 2 ระบุจำนวนค่าฟิลด์ในดัชนีหลังจากที่เรียกใช้คำสั่งแล้ว
- ผลลัพธ์ “ok: 1” ระบุว่าการดำเนินการสำเร็จ และดัชนีใหม่จะถูกเพิ่มเข้าไปในคอลเลกชัน
โค้ดด้านบนแสดงวิธีการสร้างดัชนีโดยอิงจากค่าฟิลด์เดียว แต่เราสามารถสร้างดัชนีโดยอิงจากค่าฟิลด์หลายค่าได้เช่นกัน ตัวอย่างต่อไปนี้แสดงวิธีการทำเช่นนั้น:
db.Employee.createIndex({Employeeid:1, EmployeeName:1})
เมธอด createIndex ในปัจจุบันคำนึงถึงค่าฟิลด์หลายค่า ซึ่งจะทำให้ดัชนีถูกสร้างขึ้นโดยอิงจาก “Employeeid” และ “EmployeeName” Employeeid:1 และ EmployeeName:1 บ่งชี้ว่าควรสร้างดัชนีจากค่าฟิลด์ทั้งสองนี้ โดย :1 แสดงถึงลำดับจากน้อยไปมาก นี่เรียกว่าดัชนีแบบผสม (compound index)
วิธีการค้นหาดัชนี: getIndexes()
การค้นหาดัชนีใน MongoDB ทำได้โดยใช้ รับดัชนี วิธีการดังกล่าว ตัวอย่างต่อไปนี้แสดงให้เห็นว่าสามารถทำได้อย่างไร:
db.Employee.getIndexes()
เมธอด getIndexes ใช้เพื่อค้นหาดัชนีทั้งหมดในคอลเลกชัน
หากดำเนินการคำสั่งสำเร็จ จะแสดงผลลัพธ์ดังต่อไปนี้:
Output:
ผลลัพธ์ที่ได้คือเอกสารที่แสดงให้เห็นว่ามีดัชนีสองรายการในคอลเลกชัน ได้แก่ ฟิลด์ _id และฟิลด์ Employeeid เครื่องหมาย :1 บ่งชี้ว่าค่าฟิลด์ในดัชนีถูกสร้างขึ้นในลำดับจากน้อยไปมาก
วิธีการลบดัชนี: dropIndex()
การลบดัชนีใน MongoDB ทำได้โดยใช้ ดรอปอินเด็กซ์ วิธีการดังกล่าว ตัวอย่างต่อไปนี้แสดงให้เห็นว่าสามารถทำได้อย่างไร:
db.Employee.dropIndex({Employeeid:1})
เมธอด dropIndex รับค่าฟิลด์ที่ต้องการลบออกจากดัชนี
หากดำเนินการคำสั่งสำเร็จ จะแสดงผลลัพธ์ดังต่อไปนี้:
Output:
- nIndexesWas: 3 ระบุจำนวนค่าฟิลด์ในดัชนีก่อนที่จะรันคำสั่ง แต่ละคอลเลกชันจะมีฟิลด์ _id ซึ่งนับเป็นค่าฟิลด์ด้วยเช่นกัน
- เอาท์พุต ok: 1 ระบุว่าการดำเนินการสำเร็จ และฟิลด์ “Employeeid” จะถูกลบออกจากดัชนี
หากต้องการลบดัชนีทั้งหมดในคอลเลกชันพร้อมกัน สามารถใช้คำสั่ง dropIndexes ได้ ตัวอย่างต่อไปนี้แสดงวิธีการทำ:
db.Employee.dropIndexes()
เมธอด dropIndexes จะปล่อยดัชนีทั้งหมดยกเว้นดัชนี _id
หากดำเนินการคำสั่งสำเร็จ จะแสดงผลลัพธ์ดังต่อไปนี้:
Output:
- ค่า nIndexesWas: 2 บ่งชี้จำนวนค่าฟิลด์ในดัชนีก่อนที่จะเรียกใช้คำสั่ง
- แต่ละคอลเลกชันจะมีฟิลด์ _id ซึ่งนับเป็นค่าฟิลด์เช่นกันและจะไม่ถูกลบออก MongoDBนั่นคือสิ่งที่ข้อความนี้บ่งบอก
- เอาท์พุต ok: 1 ระบุว่าการดำเนินการสำเร็จ










