เพิ่มประสิทธิภาพการค้นหา

หากต้องการแก้ปัญหาการค้นหาที่ช้า ให้ใช้ Query Explain เพื่อดูแผนการดำเนินการค้นหาและโปรไฟล์การดำเนินการรันไทม์ ส่วนต่อไปนี้จะอธิบายขั้นตอนที่คุณสามารถทำได้เพื่อเพิ่มประสิทธิภาพการค้นหาโดยขึ้นอยู่กับโปรไฟล์การดำเนินการ

จำกัดจำนวนผลลัพธ์

ใช้ช่อง "บันทึกที่แสดงผล" ในแผนผังการดำเนินการเพื่อระบุว่าการค้นหาแสดงผลเอกสารจำนวนมากหรือไม่ ลองจำกัดจำนวนเอกสารที่แสดงผลโดยใช้คําสั่ง $limit ซึ่งจะช่วยลดขนาดไบต์ที่ซีเรียลไลซ์ของผลลัพธ์เมื่อแสดงผลกับไคลเอ็นต์ผ่านเครือข่าย ในกรณีที่โหนด Limit อยู่ก่อนโหนด MajorSort เครื่องมือค้นหาจะรวมโหนด Limit และ MajorSort เข้าด้วยกัน และแทนที่การสร้างอินสแตนซ์และการจัดเรียงในหน่วยความจำทั้งหมดด้วยการจัดเรียง TopN ซึ่งจะช่วยลดข้อกำหนดด้านหน่วยความจำสำหรับการค้นหา

จำกัดขนาดเอกสารผลลัพธ์

ลองจำกัดขนาดเอกสารที่แสดงผลโดยใช้คําสั่ง $project เพื่อหลีกเลี่ยงการดึงข้อมูลฟิลด์ที่ไม่จำเป็น ซึ่งจะช่วยลดต้นทุนด้านการประมวลผลและหน่วยความจำในการประมวลผลผลลัพธ์ระดับกลาง รวมถึงขนาดไบต์ที่ซีเรียลไลซ์ของผลลัพธ์เมื่อแสดงผลกับไคลเอ็นต์ผ่านเครือข่าย ในกรณีที่ฟิลด์ทั้งหมดที่อ้างอิงในการค้นหาครอบคลุมโดยดัชนีปกติ (ไม่ใช่ดัชนีหลายคีย์) การดำเนินการนี้ยังช่วยให้การค้นหาครอบคลุมโดยการสแกนดัชนีได้อย่างสมบูรณ์ โดยไม่จำเป็นต้องดึงข้อมูลเอกสารจากพื้นที่เก็บข้อมูลหลัก

ใช้ดัชนี

ใช้คำแนะนำต่อไปนี้เพื่อตั้งค่าและเพิ่มประสิทธิภาพดัชนี

ระบุว่าการค้นหาใช้ดัชนีหรือไม่

คุณสามารถระบุว่าการค้นหาใช้ดัชนีหรือไม่โดยตรวจสอบโหนดลีฟในแผนผังการดำเนินการ หากโหนดลีฟของแผนผังการดำเนินการเป็นโหนด TableScan แสดงว่าการค้นหา ไม่ได้ใช้ดัชนีและกำลังสแกนเอกสารจากพื้นที่เก็บข้อมูลหลัก หากมีการใช้ดัชนี โหนดลีฟของแผนผังการดำเนินการจะแสดงรหัสดัชนีและฟิลด์ดัชนีของดัชนี

ระบุว่าดัชนีที่ใช้สามารถเพิ่มประสิทธิภาพได้หรือไม่

ดัชนีมีประโยชน์สำหรับการค้นหาหากสามารถลดจำนวนเอกสารที่เครื่องมือค้นหาต้องดึงข้อมูลจากพื้นที่เก็บข้อมูลหลัก หรือหากการจัดลำดับฟิลด์สามารถตอบสนองข้อกำหนดการจัดเรียงของการค้นหาได้

หากมีการใช้ดัชนีสำหรับการค้นหา แต่เครื่องมือค้นหายังคงดึงข้อมูลและ ทิ้งเอกสารจำนวนมาก (ตามที่ระบุโดยโหนด Scan ที่แสดงผลบันทึกจำนวนมาก ตามด้วยโหนด Filter ที่แสดงผลบันทึกจำนวนน้อย) แสดงว่าเพรดิเคตการค้นหาที่ตรงตามเงื่อนไขโดยใช้ดัชนีนั้น ไม่เฉพาะเจาะจง หากต้องการสร้างดัชนีที่เหมาะสมยิ่งขึ้น โปรดดู สร้างดัชนี

หากมีการใช้ดัชนีที่ไม่ใช่ดัชนีหลายคีย์สำหรับการค้นหา แต่เครื่องมือค้นหายังคง จัดลำดับชุดผลลัพธ์ใหม่ในหน่วยความจำ (ตามที่ระบุโดยโหนด MajorSort ในแผนผังการดำเนินการ ค้นหา) แสดงว่าดัชนีที่ใช้ไม่สามารถใช้เพื่อตอบสนอง ข้อกำหนดการจัดเรียงของการค้นหาได้ หากต้องการสร้างดัชนีที่เหมาะสมยิ่งขึ้น โปรดดูส่วนถัดไป

การเพิ่มประสิทธิภาพการค้นหา $lookup

คุณสามารถเพิ่มประสิทธิภาพการค้นหา $lookup ได้โดยการเพิ่มดัชนีลงในคอลเล็กชัน from ซึ่งจะช่วยให้การดำเนินการค้นหาเอกสารที่ตรงกันได้อย่างมีประสิทธิภาพโดยไม่ต้องสแกนทั้งคอลเล็กชัน

$lookup ที่มี localField และ foreignField

หากคุณใช้ตัวเลือก localField และ foreignField ในระยะ $lookup ให้สร้างดัชนีใน foreignField ในคอลเล็กชัน from

$lookup ที่มีไปป์ไลน์ที่ซ้อนกัน

หากคุณใช้ตัวเลือก pipeline ในระยะ $lookup ที่มีระยะ $match ให้สร้างดัชนีในฟิลด์ที่เกี่ยวข้องในคอลเล็กชันภายนอกเพื่อหลีกเลี่ยงการสแกนคอลเล็กชันทั้งหมด โดยทำดังนี้

  • สำหรับระยะ $match ที่มีความหมายของตัวกรอง (เช่น {$match: {a: true}}) ให้สร้างดัชนีในฟิลด์ที่เกี่ยวข้องในคอลเล็กชันภายนอก (a)
  • สำหรับระยะ $match ที่มีความหมายของการรวบรวมที่เปรียบเทียบฟิลด์กับค่าคงที่ (เช่น {$match: {$expr: {$gt: [a, 10]}}}) หรือมีการเปรียบเทียบความเท่ากัน (eq หรือ in) ระหว่างฟิลด์กับตัวแปรที่กำหนดไว้ใน let (เช่น {$match: {$expr: {$eq: [a, "$$a"]}}}) ให้สร้างดัชนีในฟิลด์ที่เกี่ยวข้องในคอลเล็กชันภายนอก โปรดทราบว่าระบบจะไม่ใช้ดัชนีหลายคีย์ในการวางแผน

สร้างดัชนี

ทำตามเอกสารประกอบการจัดการดัชนีเพื่อ สร้างดัชนี หากต้องการให้การค้นหาใช้ดัชนีได้ ให้สร้างดัชนีปกติ (ไม่ใช่ดัชนีหลายคีย์) ที่มีฟิลด์ตามลำดับต่อไปนี้

  1. ฟิลด์ทั้งหมดที่จะใช้ในโอเปอเรเตอร์ความเท่ากัน หากต้องการเพิ่มโอกาสในการนำไปใช้ซ้ำในการค้นหา ให้จัดลำดับฟิลด์ตามลำดับความถี่ที่ลดลงของฟิลด์ในโอเปอเรเตอร์ความเท่ากันในการค้นหา
  2. ฟิลด์ทั้งหมดที่จะจัดเรียง (ตามลำดับเดียวกัน)
  3. ฟิลด์ที่จะใช้ในโอเปอเรเตอร์ช่วงหรือโอเปอเรเตอร์ความไม่เท่ากันตามลำดับความเฉพาะเจาะจงของข้อจำกัดการค้นหาที่ลดลง
  4. ฟิลด์ที่จะแสดงผลเป็นส่วนหนึ่งของการค้นหาในดัชนี การรวมฟิลด์ดังกล่าวไว้ในดัชนีจะช่วยให้ดัชนีครอบคลุมการค้นหาและหลีกเลี่ยงการดึงข้อมูลเอกสารจากพื้นที่เก็บข้อมูลหลัก

สำหรับการค้นหาที่เกี่ยวข้องกับการกรองและการจัดเรียงฟิลด์อาร์เรย์ ให้ลองสร้างดัชนีหลายคีย์

ใช้คำแนะนำการค้นหา

หากคุณสร้างดัชนีที่เหมาะสมยิ่งขึ้นสำหรับการค้นหา แต่เครื่องมือค้นหาไม่ได้ใช้ดัชนีดังกล่าว คุณสามารถลบล้างการกำหนดค่าดัชนีของเครื่องมือค้นหาได้โดยใช้คำแนะนำการค้นหา

ดูข้อมูลเพิ่มเติมเกี่ยวกับเอาต์พุตของการค้นหาที่ดำเนินการด้วย Query Explain ได้ที่ ข้อมูลอ้างอิงการดำเนินการค้นหา