MongoDB:explain执行计划

x33g5p2x  于2022-03-08 转载在 其他  
字(2.5k)|赞(0)|评价(0)|浏览(405)

MongoDB:explain执行计划

一、基本语法

> db.user.find().explain()

查看结果

{
	"explainVersion" : "1",
	"queryPlanner" : {
		"namespace" : "test.user",
		"indexFilterSet" : false,
		"parsedQuery" : {
			
		},
		"queryHash" : "8B3D4AB8",
		"planCacheKey" : "D542626C",
		"maxIndexedOrSolutionsReached" : false,
		"maxIndexedAndSolutionsReached" : false,
		"maxScansToExplodeReached" : false,
		"winningPlan" : {
			"stage" : "COLLSCAN",
			"direction" : "forward"
		},
		"rejectedPlans" : [ ]
	},
	"command" : {
		"find" : "user",
		"filter" : {
			
		},
		"$db" : "test"
	},
	"serverInfo" : {
		"host" : "eff44688aa5e",
		"port" : 27017,
		"version" : "5.0.6",
		"gitVersion" : "212a8dbb47f07427dae194a9c75baec1d81d9259"
	},
	"serverParameters" : {
		"internalQueryFacetBufferSizeBytes" : 104857600,
		"internalQueryFacetMaxOutputDocSizeBytes" : 104857600,
		"internalLookupStageIntermediateDocumentMaxSizeBytes" : 104857600,
		"internalDocumentSourceGroupMaxMemoryBytes" : 104857600,
		"internalQueryMaxBlockingSortMemoryUsageBytes" : 104857600,
		"internalQueryProhibitBlockingMergeOnMongoS" : 0,
		"internalQueryMaxAddToSetBytes" : 104857600,
		"internalDocumentSourceSetWindowFieldsMaxMemoryBytes" : 104857600
	},
	"ok" : 1
}

参数含义:

参数含义
explainVersion查询计划版本
namespace要查询的集合
indexFilterSet是否使用索引
parsedQuery查询条件
winningPlan最佳执行计划
stage查询方式,常见的有COLLSCAN/全表扫描、IXSCAN/索引扫描、FETCH/根据索引去检索文档、SHARD_MERGE/合并分片结果、IDHACK/针对_id进行查询
filter过滤条件
direction搜索方向
rejectedPlans拒绝的执行计划
serverInfoMongoDB服务器信息

二、基本用法

  • explain.queryPlanner.namespace:该值返回的是该query所查询的表
  • explain.queryPlanner.indexFilterSet:针对该query是否有indexfilter
  • explain.queryPlanner.winningPlan:查询优化器针对该query所返回的最优执行计划的详细内容。
  • explain.queryPlanner.winningPlan.stage:最优执行计划的stage,这里返回是FETCH,可以理解为通过返回的index位置去检索具体的文档
  • Explain.queryPlanner.winningPlan.inputStage:用来描述子stage,并且为其父stage提供文档和索引关键字。
  • explain.queryPlanner.winningPlan.stage的child stage,此处是IXSCAN,表示进行的是index scanning。
  • explain.queryPlanner.winningPlan.keyPattern:所扫描的index内容,此处是did:1,status:1,modify_time: -1与scid : 1
  • explain.queryPlanner.winningPlan.indexName:winning plan所选用的index。
  • explain.queryPlanner.winningPlan.isMultiKey是否是Multikey,此处返回是false,如果索引建立在array上,此处将是true。
  • explain.queryPlanner.winningPlan.direction:此query的查询顺序,此处是forward,如果用了.sort({modify_time:-1})将显示backward。

相关文章