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