เกี่ยวข้องกับ Cloud Firestore Enterprise Edition เท่านั้น |
หน้านี้อธิบายวิธีดึงข้อมูลการดำเนินการค้นหาเมื่อคุณดำเนินการค้นหา
ใช้คำอธิบายการค้นหา
คุณสามารถใช้คำอธิบายการค้นหาเพื่อทำความเข้าใจวิธีดำเนินการกับการค้นหา ซึ่งจะให้รายละเอียดที่คุณใช้เพิ่มประสิทธิภาพการค้นหาได้
คุณสามารถใช้คำอธิบายการค้นหาผ่านคอนโซล Google Cloud หรือคำสั่ง explain
ได้
คอนโซล
เรียกใช้คำค้นหาในตัวแก้ไขคำค้นหา แล้วเปิดแท็บคำอธิบาย
-
ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล
- เลือกฐานข้อมูล Cloud Firestore ที่เข้ากันได้กับ MongoDB จากรายการฐานข้อมูล Google Cloud Console จะเปิด Firestore Explorer สำหรับฐานข้อมูลนั้น
- ป้อนคำค้นหาในตัวแก้ไขคำค้นหา แล้วคลิกเรียกใช้
-
คลิกแท็บคำอธิบายเพื่อดูเอาต์พุตการวิเคราะห์การค้นหา
MongoDB API
ระบบรองรับการค้นหา Explain ใน MongoDB API ผ่านคำสั่ง
explain
ซึ่งคุณใช้ได้ในเครื่องมือต่างๆ เช่น Mongo Shell และ Compass
คำสั่ง explain
ใช้ได้กับคำสั่ง aggregate
find
, distinct
และ count
เช่น
db.collection.explain.find(...)
คุณยังใช้วิธี explain()
ได้ด้วย เช่น
db.collection.find({QUERY}).explain()
ข้อจำกัด
โปรดทราบข้อจำกัดและความแตกต่างต่อไปนี้-
Query Explain ไม่รองรับคำสั่งที่แสดงผลเคอร์เซอร์ ตัวอย่างเช่น ระบบไม่รองรับการเรียกใช้คำอธิบายโดยการเรียกใช้คำสั่งต่อไปนี้โดยตรง
db.collection.aggregate(..., explain: true)
Query Explain รองรับเฉพาะคำสั่ง
find
,aggregate
,count
และdistinct
-
ตัวเลือก
Verbosity
และComment
ของ Query Explain ไม่รองรับผ่าน MongoDB API ลักษณะการทำงานจะตรงกับตัวเลือกexecutionStats
ระบบจะไม่สนใจตัวเลือกallPlansExecution
และqueryPlanner
หากมีการระบุ
การวิเคราะห์
เอาต์พุตของ Query Explain มีองค์ประกอบหลัก 2 อย่าง ได้แก่ สถิติสรุปและแผนผังการดำเนินการ ลองดูตัวอย่างคำค้นหานี้
db.order.aggregate(
[
{ "$match": { "user_id": 1234 } },
{ "$sort": { "date_placed": 1 } }
]
)
สถิติสรุป
ส่วนบนของเอาต์พุตที่อธิบายจะมีสรุปสถิติการดำเนินการ ใช้สถิติเหล่านี้เพื่อพิจารณาว่าการค้นหามีเวลาในการตอบสนองหรือต้นทุนสูงหรือไม่ นอกจากนี้ ยังมีสถิติหน่วยความจำที่ช่วยให้คุณทราบว่าการค้นหาของคุณใกล้ถึงขีดจำกัดหน่วยความจำมากน้อยเพียงใด
Billing Metrics:
read units: 1
Execution Metrics:
request peak memory usage: 4.00 KiB (4,096 B)
results returned: 1
แผนผังการดำเนินการ
แผนผังการดำเนินการอธิบายการดำเนินการของคําค้นหาเป็นชุดของโหนด โหนดล่างสุด (โหนดใบ) จะดึงข้อมูลจากเลเยอร์ที่เก็บข้อมูลซึ่งจะข้ามขึ้นไปตามโครงสร้างต้นไม้เพื่อสร้างการตอบกลับการค้นหา
ดูรายละเอียดเกี่ยวกับโหนดการดำเนินการแต่ละรายการได้ที่ข้อมูลอ้างอิงเกี่ยวกับการดำเนินการ
ดูรายละเอียดเกี่ยวกับวิธีใช้ข้อมูลนี้เพื่อเพิ่มประสิทธิภาพการค้นหาได้ที่เพิ่มประสิทธิภาพการดำเนินการค้นหา
ตัวอย่างแผนผังการดำเนินการมีดังนี้
• Compute
| $out_1: map_set($record_1, "__id__", $__id___1, "__key__", $__key___1, "__row_id__", $__row_id___1, "__$0__", $__$0___2)
| is query result: true
|
| Execution:
| records returned: 1
|
└── • Compute
| $__$0___2: UNSET
|
| Execution:
| records returned: 1
|
└── • Compute
| $__key___1: UNSET
| $__row_id___1: UNSET
|
| Execution:
| records returned: 1
|
└── • Compute
| $__id___1: _id($record_1.__key__)
|
| Execution:
| records returned: 1
|
└── • MajorSort
| fields: [$v_5 ASC]
| output: [$record_1]
|
| Execution:
| records returned: 1
| peak memory usage: 4.00 KiB (4,096 B)
|
└── • Compute
| $v_5: array_get($v_4, 0L)
|
| Execution:
| records returned: 1
|
└── • Compute
| $v_4: sortPaths(array($record_1.date_placed), [date_placed ASC])
|
| Execution:
| records returned: 1
|
└── • Filter
| expression: $eq($user_id_1, 1,234)
|
| Execution:
| records returned: 1
|
└── • TableScan
source: **/my_collection
order: STABLE
properties: * - { __create_time__, __update_time__ }
output record: $record_1
output bindings: {$user_id_1=user_id}
variables: [$record_1, $user_id_1]
Execution:
records returned: 1
records scanned: 1
ขั้นตอนถัดไป
- ดูข้อมูลเกี่ยวกับโหนดในแผนการดำเนินการได้ที่ข้อมูลอ้างอิงการดำเนินการของคําค้นหา
- ดูวิธีเพิ่มประสิทธิภาพการค้นหาได้ที่เพิ่มประสิทธิภาพการดำเนินการค้นหา