使用查询解释分析查询执行
本页面介绍了如何在执行查询时检索查询执行信息。使用查询解释
您可以使用“查询解释”功能来了解查询的执行方式。 这会提供可用于优化查询的详细信息。
您可以通过 Google Cloud 控制台或 explain
命令使用“查询说明”。
控制台
在查询编辑器中执行查询,然后打开说明标签页:
-
在 Google Cloud 控制台中,前往数据库页面。
- 从数据库列表中,选择一个具有 MongoDB 兼容性的 Firestore 数据库。 Google Cloud 控制台会打开相应数据库的 Firestore 浏览器。
- 在查询编辑器中输入查询,然后点击运行。
-
点击说明标签页以查看查询分析输出。
Mongo API
Mongo API 中的查询说明通过 explain
命令提供支持,您可以在 Mongo Shell 和 Compass 等工具中使用该命令。
explain
命令支持 aggregate
、find
、distinct
和 count
命令,例如:
db.collection.explain.find(...)
您还可以使用 explain()
方法,例如:
db.collection.find({QUERY}).explain()
限制
请注意以下限制和差异:-
查询说明不支持返回光标的命令。例如,不支持通过直接调用以下命令来调用 explain:
db.collection.aggregate(..., explain: true)
查询说明仅支持
find
、aggregate
、count
和distinct
命令。-
MongoDB API 不支持 Query Explain 的
Verbosity
和Comment
选项。此行为与executionStats
选项的行为相同。如果提供了allPlansExecution
和queryPlanner
选项,则会忽略这些选项。
分析
查询说明的输出包含两个主要组成部分:摘要统计信息和执行树。 请考虑以下查询示例:
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
执行树
执行树将查询执行描述为一系列节点。底部节点(叶节点)从存储层检索数据,然后向上遍历树以生成查询响应。
如需详细了解每个执行节点,请参阅执行参考。
如需详细了解如何使用这些信息来优化查询,请参阅优化查询执行。
以下是执行树的示例:
• Drop
| fields to drop: [__$3__]
| records returned: 0
|
└── • MajorSort
| fields: [__$3__ ASC]
| peak memory usage: 4.00 KiB (4,096 B)
| records returned: 0
|
└── • Extend
| expressions: [date_placed AS __$3__]
| records returned: 0
|
└── • Drop
| fields to drop: [__key__]
| records returned: 0
|
└── • Extend
| expressions: [_id(__key__) AS __id__]
| records returned: 0
|
└── • Filter
| expression: $eq(user, 1,234)
| records returned: 0
|
└── • TableScan
order: UNDEFINED
properties: * - { __create_time__, __update_time__ }
records returned: 0
records scanned: 0
source: (default)#/**/collection