在 MongoDB 中,可以使用 explain()
方法来查看查询的执行计划,从而判断是否使用了索引。
explain()
方法可以作为 find()
或 aggregate()
方法的参数,返回查询的执行计划。
例如,在命令行中执行以下命令:
db.collection.find({name: "John"}).explain("executionStats")
explain中的可选参数有
,
queryPlanner
,
executionStats
,默认为
allPlansExecution
queryPlanner
这个命令将会返回查询的执行计划,其中包括了是否使用了索引。
具体来说,explain()
方法返回的文档中会包含一个 "executionStats"
字段,该字段中有一个 "executionStages"
子字段,其中有一个 "inputStage"
子字段,这个子字段描述了执行计划中的输入阶段,其中包含了是否使用了索引的信息。
如果查询使用了索引,那么在 "executionStats.executionStages.inputStage"
字段中会包含一个 "winningPlan"
子字段,该子字段中有一个 "stage"
属性,其值为 "IXSCAN"
,表示使用了索引扫描。
如果查询没有使用索引,那么在 "executionStats.executionStages.inputStage"
字段中会包含一个 "winningPlan"
子字段,该子字段中有一个 "stage"
属性,其值为 "COLLSCAN"
,表示执行了全表扫描。
需要注意的是,执行 explain()
方法会导致查询被执行两次,因此在生产环境中应该谨慎使用。
好奇怪,别人的评论我都看不到.