255_Mongodb_索引执行计划

网友投稿 589 2022-05-29

查询优化诊断

查询时候提供了 explain(), 来显示执行计划的相关信息, 可以根据结果进行性能优化

执行结果中字段说明

参数

说明

Shards.shardName

分片名称

Shards.connectionString

此分片上的服务器信息

Shards.serverInfo

服务器信息

255_Mongodb_索引执行计划

Shards.plannerVersion

查询计划版本

explain.queryPlanner.namespace

数据库 . 集合

explain.queryPlanner.indexFilterSet

是否使用到了索引来过滤

explain.queryPlanner.parsedQuery

解析查询,即过滤条件是什么

explain.queryPlanner.winningPlan

显示是否通过索引显示文档和索引信息

explain.queryPlanner.winningPlan.Stage

查询时使用哪种方式查询文档 常见如下

COLLSCAN 查询的字段并没有建立索引, 使用全表扫描

IXSCAN    索引扫描

FETCH     点查/ 查询的字段建立了索引(根据索引去检索指定的document)

SHARD_MERGE  将各个分片返回数据进行merge

SORT           查询时在内存中进行了排序 但没有使用索引查询

LIMIT    限制显示查询结果的数量

SKIP         查询时使用了skip跳过几个文档

IDHACK      查询时针对特定的 “_id”进行查询

TEXT       查询使用全文本索引

COUNT  利用db.coll.explain().count()之类进行count运算

COUNTSCAN  查询计算总数时没有使用索引

COUNT_SCAN  查询计算总数时会使用索引

SUBPLA        使用$or操作符查询时没有使用索引

PROJECTION   查询时限制显示特定字段

explain.queryPlanner.winningPlan. inputStage

explain.queryPlanner.winningPlan.stage的child stage,此处是IXSCAN,表示进行的是index scanning

explain.queryPlanner.winningPlan.indexBounds

winningplan所扫描的索引范围

Shards.rejectPlans

拒绝执行计划

OperationTime

执行计划操作时间

> db.inventory.find({item : "journal"}).sort({status:-1, qty:-1}).explain( "allPlansExecution") { "explainVersion" : "1", #queryPlanner是现版本explain的默认模式,并不会去真正进行query语句查询,而是针对query语句进行执行计划分析并选出winning plan "queryPlanner" : { "namespace" : "alex.inventory", # query所查询的库 表 "indexFilterSet" : false, # 是否使用到了索引来过滤 "parsedQuery" : { # 解析查询,即过滤条件是什么 "item" : { "$eq" : "journal" } }, "maxIndexedOrSolutionsReached" : false, "maxIndexedAndSolutionsReached" : false, "maxScansToExplodeReached" : false, "winningPlan" : { # 查询优化器针对该query所返回的最优执行计划的详细内容 "stage" : "SORT", # 最优执行计划的stage "sortPattern" : { "status" : -1, "qty" : -1 }, "memLimit" : 104857600, "type" : "simple", "inputStage" : { # 一个工作单元,一个stage中可以有多个stage "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "item" : 1 }, "indexName" : "item_1", "isMultiKey" : false, #是否是Multikey,此处返回是false,如果索引建立在array上,此处将是true。 "multiKeyPaths" : { "item" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", #此query的查询顺序,此处是forward,如果用了.sort({w:-1})将显示backward "indexBounds" : { # 索引扫描范围 "item" : [ "[\"journal\", \"journal\"]" ] } } } }, "rejectedPlans" : [ ] }, "executionStats" : { #是否执行成功 "executionSuccess" : true, "nReturned" : 1, #查询的返回条数 "executionTimeMillis" : 0, #整体执行时间 "totalKeysExamined" : 1, #索引扫描次数 "totalDocsExamined" : 1, #document扫描次数 "executionStages" : { "stage" : "SORT", # 用哪种方式去查询文档 "nReturned" : 1, "executionTimeMillisEstimate" : 0, "works" : 4, "advanced" : 1, "needTime" : 2, "needYield" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "sortPattern" : { "status" : -1, "qty" : -1 }, "memLimit" : 104857600, "type" : "simple", "totalDataSizeSorted" : 325, "usedDisk" : false, "inputStage" : { "stage" : "FETCH", "nReturned" : 1, "executionTimeMillisEstimate" : 0, "works" : 2, "advanced" : 1, "needTime" : 0, "needYield" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "docsExamined" : 1, "alreadyHasObj" : 0, "inputStage" : { "stage" : "IXSCAN", "nReturned" : 1, "executionTimeMillisEstimate" : 0, "works" : 2, "advanced" : 1, "needTime" : 0, "needYield" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "keyPattern" : { "item" : 1 }, "indexName" : "item_1", "isMultiKey" : false, "multiKeyPaths" : { "item" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "item" : [ "[\"journal\", \"journal\"]" ] }, "keysExamined" : 1, "seeks" : 1, "dupsTested" : 0, "dupsDropped" : 0 } } }, "allPlansExecution" : [ ] }, "command" : { "find" : "inventory", "filter" : { "item" : "journal" }, "sort" : { "status" : -1, "qty" : -1 }, "$db" : "alex" }, "serverInfo" : { "host" : "SWX989839", "port" : 27017, "version" : "5.0.5", "gitVersion" : "d65fd89df3fc039b5c55933c0f71d647a54510ae" }, "serverParameters" : { "internalQueryFacetBufferSizeBytes" : 104857600, "internalQueryFacetMaxOutputDocSizeBytes" : 104857600, "internalLookupStageIntermediateDocumentMaxSizeBytes" : 104857600, "internalDocumentSourceGroupMaxMemoryBytes" : 104857600, "internalQueryMaxBlockingSortMemoryUsageBytes" : 104857600, "internalQueryProhibitBlockingMergeOnMongoS" : 0, "internalQueryMaxAddToSetBytes" : 104857600, "internalDocumentSourceSetWindowFieldsMaxMemoryBytes" : 104857600 }, "ok" : 1 }

MongoDB

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:NodeJs 后端开发 04 使用axios调用第三方服务API
下一篇:这52页pdf,顶10篇python自动化办公文章
相关文章