หน้านี้อธิบายการจัดทำดัชนีสำหรับ Cloud Firestore Cloud Firestore ไม่ได้สร้างดัชนีใดๆ โดยค่าเริ่มต้น สร้างดัชนีสำหรับคำค้นหาที่ใช้บ่อยที่สุดเพื่อปรับปรุงประสิทธิภาพของฐานข้อมูล
ดัชนีมีผลกระทบอย่างมากต่อประสิทธิภาพของฐานข้อมูล หากมีการสร้างดัชนีสำหรับการค้นหา ฐานข้อมูลจะแสดงผลลัพธ์ได้อย่างมีประสิทธิภาพโดยการลดปริมาณข้อมูลที่ต้องสแกนและลดการทำงานที่จำเป็นในการจัดเรียงผลลัพธ์ อย่างไรก็ตาม รายการดัชนีจะเพิ่มค่าใช้จ่ายในการจัดเก็บและปริมาณงาน ที่ทำในระหว่างการดำเนินการเขียนในช่องที่จัดทำดัชนี
คำจำกัดความและโครงสร้างดัชนี
ดัชนีประกอบด้วยข้อมูลต่อไปนี้
- รหัสคอลเล็กชัน
- รายการฟิลด์ในคอลเล็กชันที่ระบุ
- ลำดับการจัดเรียงข้อมูลในแต่ละฟิลด์ ไม่ว่าจะเป็นจากน้อยไปมากหรือจากมากไปน้อย
ดัชนียังเปิดใช้ตัวเลือก sparse, multikey หรือ unique ได้ด้วย
การจัดเรียงดัชนี
ลำดับและทิศทางการจัดเรียงของแต่ละฟิลด์จะกำหนดดัชนีโดยไม่ซ้ำกัน ตัวอย่างเช่น ดัชนีต่อไปนี้เป็นดัชนีที่แตกต่างกัน 2 รายการและไม่สามารถใช้แทนกันได้
| การรวบรวม | ช่อง |
|---|---|
| เมือง | ประเทศ (จากน้อยไปมาก), ประชากร (จากมากไปน้อย) |
| เมือง | ประชากร (จากมากไปน้อย), ประเทศ (จากน้อยไปมาก) |
เมื่อสร้างดัชนีเพื่อรองรับการค้นหา ให้รวมฟิลด์ตามลำดับเดียวกับการค้นหา
ความหนาแน่นของดัชนี
โดยค่าเริ่มต้น รายการดัชนีจะจัดเก็บข้อมูลจากเอกสารทั้งหมดในคอลเล็กชัน ซึ่งเรียกว่าดัชนีแบบไม่กระจัดกระจาย ระบบจะเพิ่มรายการดัชนีสำหรับเอกสารไม่ว่าเอกสารจะมีฟิลด์ที่ระบุในดัชนีหรือไม่ก็ตาม ระบบจะถือว่าฟิลด์ที่ไม่มีอยู่มีค่า NULL เมื่อสร้างรายการดัชนี หากต้องการเปลี่ยนลักษณะการทำงานนี้ คุณสามารถกำหนดดัชนีเป็นดัชนีแบบกระจัดกระจายได้
ดัชนีแบบกระจัดกระจาย
ดัชนีแบบกระจายจะจัดทำดัชนีเฉพาะเอกสารในคอลเล็กชันที่มีค่า (รวมถึงค่า 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