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