การวิเคราะห์แบบสอบถาม MongoDB
แบบสอบถาม MongoDB และการวิเคราะห์เพื่อให้เกิดประสิทธิภาพของดัชนีเสนอของเราเป็นเครื่องมือสำคัญในการค้นหาการวิเคราะห์ประสิทธิภาพ
การวิเคราะห์แบบสอบถาม MongoDB ฟังก์ชั่นที่ใช้กันทั่วไปคืออธิบาย () และคำใบ้ ()
ใช้อธิบาย ()
อธิบายการดำเนินการให้ข้อมูลแบบสอบถามใช้ดัชนีและแบบสอบถามสถิติ ช่วยให้เราเพื่อเพิ่มประสิทธิภาพของดัชนี
ต่อไปเราจะสร้างดัชนีเพศและผู้ใช้ user_name ในคอลเลกชันนี้:
>db.users.ensureIndex({gender:1,user_name:1}) </p> <p>现在在查询语句中使用 explain :</p> <pre> >db.users.find({gender:"M"},{user_name:1,_id:0}).explain()
ดังกล่าวข้างต้นอธิบาย () แบบสอบถามส่งกลับผลลัพธ์ต่อไปนี้:
{ "cursor" : "BtreeCursor gender_1_user_name_1", "isMultiKey" : false, "n" : 1, "nscannedObjects" : 0, "nscanned" : 1, "nscannedObjectsAllPlans" : 0, "nscannedAllPlans" : 1, "scanAndOrder" : false, "indexOnly" : true, "nYields" : 0, "nChunkSkips" : 0, "millis" : 0, "indexBounds" : { "gender" : [ [ "M", "M" ] ], "user_name" : [ [ { "$minElement" : 1 }, { "$maxElement" : 1 } ] ] } }
ตอนนี้เรามองไปที่เขตของชุดผลลัพธ์:
- indexOnly: ข้อมูลเป็นความจริงที่เราใช้ดัชนี
- เคอร์เซอร์: เพราะคำนี้ใช้ดัชนีดัชนี MongoDB จะถูกเก็บไว้ในโครงสร้าง B ต้นไม้จึงยังใช้ประเภท BtreeCursor ของเคอร์เซอร์ หากคุณไม่ได้ใช้ดัชนีชนิดเคอร์เซอร์อยู่ BasicCursor คีย์นี้จะให้ชื่อของดัชนีที่คุณกำลังใช้คุณสามารถดูโดยชื่อ system.indexes ตั้งภายใต้ฐานข้อมูลปัจจุบัน (ที่สร้างขึ้นโดยอัตโนมัติเนื่องจากข้อมูลดัชนีจะถูกเก็บไว้นี้จะถูกกล่าวถึงน้อย) เพื่อให้ได้ดัชนีข้อมูลเพิ่มเติม .
- N: จำนวนของเอกสารกลับโดยการค้นหาปัจจุบัน
- nscanned / nscannedObjects: สอบถามรายละเอียดเพิ่มเติมได้แสดงให้เห็นว่าจำนวนปัจจุบันของเอกสารที่สแกนในการเก็บรวบรวมจุดมุ่งหมายของเราคือการทำให้ค่านี้และส่งกลับจำนวนของเอกสารที่ใกล้ชิดที่ดีกว่า
- มิลลิวินาที: เวลาปัจจุบันจำนวนมิลลิวินาทีที่จำเป็นโดยแบบสอบถาม
- indexBounds: การใช้งานเฉพาะดัชนีการค้นหาปัจจุบัน
ใช้คำใบ้ ()
ในขณะที่การเพิ่มประสิทธิภาพการค้นหา MongoDB ทั่วไปทำงานดีมาก แต่คุณยังสามารถใช้คำแนะนำที่จะบังคับให้ MongoDB ใช้ดัชนีที่ระบุ
วิธีการนี้จะช่วยเพิ่มประสิทธิภาพในบางกรณี ดัชนีของคอลเลกชันและดำเนินการแบบสอบถามมากกว่าหนึ่งสาขา (สาขาบางส่วนได้รับการจัดทำดัชนี)
ตัวอย่างใช้แบบสอบถามต่อไปนี้ระบุเพศและดัชนี user_name เขตข้อมูลแบบสอบถาม:
>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1})
คุณสามารถใช้อธิบาย () ฟังก์ชันที่จะแยกแบบสอบถามด้านบน:
>db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1}).explain()