本頁說明如何擷取執行查詢時的查詢執行資訊。
使用「查詢說明」
您可以使用「查詢說明」瞭解查詢的執行方式,並根據詳細資料最佳化查詢。
您可以在 Firebase 控制台中使用查詢說明:
- 在 Firebase 控制台中,依序前往「資料庫和儲存空間」>「Firestore」>「資料」>「查詢編輯器」。
- 執行要取得執行資訊的查詢。
- 按一下「Query Explain」(查詢說明) 分頁標籤,即可查看查詢分析輸出內容。
說明模式
根據您要偵錯的內容,可以透過不同模式執行「查詢說明」查詢:
analyze:規劃及執行查詢。除了查詢產生的正常結果外,還會傳回規劃工具資訊、執行階段執行統計資料和指標。explain:規劃查詢,但不執行查詢。傳回規劃工具資訊,但不傳回執行階段統計資料、指標或結果。這項功能有助於偵錯查詢行為,不必執行耗費資源的作業。
分析
查詢說明的輸出內容包含兩個主要元件:摘要統計資料和執行樹狀結構。以這個查詢為例:
db.pipeline().collection('/users').sort(field("status").ascending()).limit(100)
摘要統計資料
說明輸出的頂端會顯示執行統計資料摘要。請使用這些統計資料判斷查詢是否延遲時間長或費用高。摘要也會包含記憶體統計資料,讓您瞭解查詢是否接近記憶體限制。
Execution:
results returned: 2
request peak memory usage: 20.25 KiB (20,736 B)
data bytes read: 148 B
entity row scanned: 2
Billing:
read units: 1
執行樹狀結構
執行樹狀結構會將查詢執行作業描述為一系列節點。底部節點 (葉節點) 會從儲存層擷取資料,並在樹狀結構中向上遍歷,以產生查詢回應。
如要進一步瞭解每個執行節點,請參閱「執行參考資料」。
如要瞭解如何運用這項資訊最佳化查詢,請參閱「最佳化查詢執行作業」。
以下是執行樹狀結構的範例:
Tree:
• Compute
| $out_1: map_set($record_1, "__name__", $__name___1, "__key__", unset)
| is query result: true
|
| Execution:
| records returned: 2
| latency: 5.96 ms (local <1 ms)
|
└── • Compute
| $__name___1: map_get($record_1, "__key__")
|
| Execution:
| records returned: 2
| latency: 5.88 ms (local <1 ms)
|
└── • MajorSort
| fields: [$v_1 ASC]
| output: [$record_1]
| limit: 100
|
| Execution:
| records returned: 2
| latency: 5.86 ms (local <1 ms)
| peak memory usage: 20.25 KiB (20,736 B)
|
└── • Compute
| $v_1: map_get($record_1, "status")
|
| Execution:
| records returned: 2
| latency: 5.23 ms (local <1 ms)
|
└── • TableScan
source: /users
order: UNDEFINED
properties: *
row range: (-∞..+∞)
output record: $record_1
variables: [$record_1]
Execution:
records returned: 2
latency: 4.68 ms
records scanned: 2
data bytes read: 148 B