หน้านี้อธิบายการจัดทำดัชนีสำหรับ Cloud Firestore Cloud Firestore จะไม่สร้างดัชนีใดๆ โดยค่าเริ่มต้น หากต้องการปรับปรุงประสิทธิภาพของฐานข้อมูล ให้สร้างดัชนีสำหรับคำค้นหาที่ใช้บ่อยที่สุด
ดัชนีมีผลอย่างมากต่อประสิทธิภาพของฐานข้อมูล หากมีดัชนีสำหรับคำค้นหา ฐานข้อมูลจะแสดงผลลัพธ์ได้อย่างมีประสิทธิภาพโดยลดปริมาณข้อมูลที่ต้องสแกนและลดงานที่ต้องใช้ในการจัดเรียงผลลัพธ์ อย่างไรก็ตาม รายการดัชนีจะเพิ่มค่าใช้จ่ายในการจัดเก็บข้อมูลและปริมาณงานที่ทำระหว่างการดำเนินการเขียนในช่องที่มีการจัดทำดัชนี
คำจำกัดความและโครงสร้างดัชนี
ดัชนีประกอบด้วยข้อมูลต่อไปนี้
- รหัสคอลเล็กชัน
- รายการช่องในคอลเล็กชันที่ระบุ
- ลำดับจากน้อยไปมากหรือมากไปน้อยสำหรับแต่ละช่อง
นอกจากนี้ ดัชนียังเปิดใช้ตัวเลือกแบบ เบาบาง หลายคีย์ หรือ ไม่ซ้ำกันได้ด้วย
การจัดลำดับดัชนี
ลำดับและทิศทางการจัดเรียงของแต่ละช่องจะกำหนดดัชนีที่ไม่ซ้ำกัน ตัวอย่างเช่น ดัชนีต่อไปนี้เป็นดัชนี 2 รายการที่แตกต่างกันและใช้แทนกันไม่ได้
| คอลเล็กชัน | ช่อง |
|---|---|
| เมือง | ประเทศ (จากน้อยไปมาก), ประชากร (จากมากไปน้อย) |
| เมือง | ประชากร (จากมากไปน้อย), ประเทศ (จากน้อยไปมาก) |
เมื่อสร้างดัชนีเพื่อรองรับคำค้นหา ให้ใส่ช่องตามลำดับเดียวกับคำค้นหา
ความหนาแน่นของดัชนี
โดยค่าเริ่มต้น รายการดัชนีจะจัดเก็บข้อมูลจากเอกสารทั้งหมดในคอลเล็กชัน ซึ่งเรียกว่าดัชนีแบบไม่เบาบาง ระบบจะเพิ่มรายการดัชนีสำหรับเอกสารไม่ว่าเอกสารจะมีช่องใดช่องหนึ่งที่ระบุไว้ในดัชนีหรือไม่ก็ตาม ระบบจะถือว่าช่องที่ไม่มีอยู่มีค่า NULL เมื่อสร้างรายการดัชนี หากต้องการเปลี่ยนลักษณะการทำงานนี้ คุณสามารถกำหนดดัชนีเป็นดัชนีแบบเบาบางได้
ดัชนีแบบเบาบาง
ดัชนีแบบเบาบางจะจัดทำดัชนีเฉพาะเอกสารในคอลเล็กชันที่มีค่า (รวมถึงค่าว่าง) สำหรับช่องที่มีการจัดทำดัชนีอย่างน้อย 1 ช่อง ดัชนีแบบเบาบางช่วยลดค่าใช้จ่ายในการจัดเก็บข้อมูลและปรับปรุงประสิทธิภาพได้
ดัชนีหลายคีย์สำหรับค่าอาร์เรย์
หากสร้างดัชนีในช่องที่มีค่าอาร์เรย์ คุณต้องสร้างดัชนีหลายคีย์ ดัชนีปกติไม่สามารถจัดทำดัชนีค่าอาร์เรย์ได้ ดัชนีหลายคีย์รองรับช่องอาร์เรย์ได้สูงสุด 1 ช่องในคำจำกัดความดัชนี และสามารถใช้สำหรับการดำเนินการที่ข้ามค่าอาร์เรย์
ใช้ดัชนีหลายคีย์เฉพาะในกรณีที่คุณทราบว่าต้องจัดทำดัชนีค่าอาร์เรย์ ดัชนีปกติมีข้อดีเมื่อประมวลผลคำค้นหา เช่น ดัชนีปกติสามารถกรองค่าภายในช่วงได้อย่างมีประสิทธิภาพมากขึ้น
สถานการณ์ต่อไปนี้จะทำให้เกิดข้อผิดพลาดเมื่อใช้ค่าอาร์เรย์และดัชนีหลายคีย์
- การดำเนินการพยายามเพิ่มค่าอาร์เรย์ลงในช่องที่มีการจัดทำดัชนีโดยดัชนีปกติ หากต้องการเพิ่มค่าอาร์เรย์ คุณต้องลบดัชนีปกติที่มีอยู่บนช่องนั้น แล้วสร้างดัชนีเหล่านั้นขึ้นมาใหม่เป็นดัชนีหลายคีย์
- คุณพยายามสร้างดัชนีปกติในช่องที่มีค่าอาร์เรย์ คุณต้องสร้างดัชนีหลายคีย์หรือลบค่าอาร์เรย์
- การดำเนินการพยายามจัดทำดัชนีหลายช่องที่มีค่าอาร์เรย์ ดัชนีหลายคีย์จะมีช่องที่มีค่าอาร์เรย์ได้ไม่เกิน 1 ช่อง หากต้องการดำเนินการต่อ ให้แก้ไขโมเดลข้อมูลหรือคำจำกัดความดัชนี
- คุณพยายามสร้างดัชนีหลายคีย์ที่เส้นทางของช่อง 2 ช่องมีคำนำหน้าเหมือนกัน เช่น
users.postsและusers.zip
ดัชนีที่ไม่ซ้ำกัน
ตั้งค่าตัวเลือกดัชนีที่ไม่ซ้ำกันเพื่อบังคับใช้ค่าที่ไม่ซ้ำกันสำหรับช่องที่มีการจัดทำดัชนี สำหรับดัชนีในหลายช่อง ค่าแต่ละชุดต้องไม่ซ้ำกันในดัชนี ฐานข้อมูลจะปฏิเสธการดำเนินการอัปเดตและแทรกที่พยายามสร้างรายการดัชนีที่มีค่าซ้ำกัน หากข้อมูลของช่องที่มีการจัดทำดัชนีมีค่าซ้ำกันและคุณพยายามสร้างดัชนีที่ไม่ซ้ำกัน การสร้างดัชนีจะล้มเหลวและแสดงข้อความแสดงข้อผิดพลาดในรายละเอียดการดำเนินการ
ช่องที่ไม่มีอยู่ในดัชนีที่ไม่ซ้ำกัน
หากคุณแทรกเอกสารที่มีช่องที่ขาดหายไปสำหรับดัชนีที่ไม่ซ้ำกัน ดัชนีจะตั้งค่า null สำหรับช่องที่ขาดหายไป รายการดัชนีที่ได้ต้องไม่ซ้ำกัน ไม่เช่นนั้นการดำเนินการจะล้มเหลว
ตัวอย่างเช่น ดัชนีนี้
db.cities.createIndex( { "name": 1 }, { unique: true } )
หากคุณเพิ่มเอกสาร {"abbreviation": "LA"} ลงในคอลเล็กชัน ดัชนีที่ไม่ซ้ำกัน
จะสร้างรายการที่มี name ตั้งค่าเป็น null จากนั้นหากคุณพยายามเพิ่ม
เอกสาร {"abbreviation": "NYC"} การดำเนินการจะล้มเหลวเนื่องจากรายการ
ดัชนีที่ไม่ซ้ำกันที่ได้เหมือนกัน
ลักษณะการทำงานเดียวกันนี้ใช้กับดัชนีที่ไม่ซ้ำกันที่มีหลายช่อง
เมื่อสร้างหรืออัปเดตเอกสาร ระบบจะตั้งค่าช่องที่มีการจัดทำดัชนีที่ขาดหายไปเป็น null และรายการดัชนีที่ได้ต้องไม่ซ้ำกันในดัชนี
ดัชนี TTL
ใช้ดัชนี TTL เพื่อนำข้อมูลที่ล้าสมัยออกจากฐานข้อมูลโดยอัตโนมัติ ดัชนี TTL จะกำหนดช่องที่ระบุเป็นเวลาหมดอายุสำหรับเอกสารในคอลเล็กชันที่ระบุ TTL ช่วยให้คุณลดค่าใช้จ่ายในการจัดเก็บข้อมูลได้ด้วยการล้างข้อมูลที่ล้าสมัย โดยปกติแล้ว ระบบจะลบข้อมูลภายใน 24 ชั่วโมงหลังจากเวลาหมดอายุ
แก้ปัญหาข้อผิดพลาดในการสร้างดัชนี
คุณอาจพบข้อผิดพลาดในการสร้างดัชนีเมื่อจัดการดัชนี การดำเนินการจัดทำดัชนีอาจล้มเหลวหากฐานข้อมูลพบปัญหาเกี่ยวกับข้อมูล การดำเนินการจัดทำดัชนีอาจล้มเหลวเนื่องจากสาเหตุต่อไปนี้
- คุณใช้ดัชนีถึงขีดจำกัดแล้ว เช่น การดำเนินการอาจใช้รายการดัชนีต่อเอกสารถึงจำนวนสูงสุดแล้ว หากการสร้างดัชนีล้มเหลว คุณจะเห็นข้อความแสดงข้อผิดพลาด หากยังใช้ดัชนีไม่ถึงขีดจำกัด ให้ลองดำเนินการจัดทำดัชนีอีกครั้ง
- ต้องใช้ดัชนีหลายคีย์ ช่องที่มีการจัดทำดัชนีอย่างน้อย 1 ช่องมีค่าอาร์เรย์ หากต้องการดำเนินการต่อ คุณต้องใช้ดัชนีหลายคีย์หรือลบค่าอาร์เรย์
- การดำเนินการพยายามจัดทำดัชนีหลายช่องที่มีค่าอาร์เรย์ ดัชนีหลายคีย์จะมีช่องที่มีค่าอาร์เรย์ได้ไม่เกิน 1 ช่อง หากต้องการดำเนินการต่อ ให้แก้ไขโมเดลข้อมูลหรือคำจำกัดความดัชนี
- คุณตั้งค่าตัวเลือกดัชนีที่ไม่ซ้ำกันและข้อมูลของช่องที่มีการจัดทำดัชนีจะสร้างรายการดัชนีที่ซ้ำกัน หากต้องการดำเนินการต่อ ให้นำค่าชุดที่ซ้ำกันออกจากข้อมูล
ขั้นตอนถัดไป
- ดูวิธีสร้างและจัดการดัชนีหรือดัชนี TTL