Mongo Shell 查询优化
参考文章
评估查询性能
-
db.collection.expalin("executionStats")
提供了关于查询的性能统计信息,这些信息可用于衡量查询是否以及如何使用索引。 -
db.getCollection("aat_machine_defective_rate_config").find({}).explain("executionStats")
,在mongo shell执行上述命令后返回了对查询语句的分析,如下:返回的结果:
{ "queryPlanner" : { "mongosPlannerVersion" : 1, "winningPlan" : { "stage" : "SINGLE_SHARD", "shards" : [ { "shardName" : "data_set2", "connectionString" : "shard2/192.168.xx:27001", "serverInfo" : { "host" : "mongo3", "port" : 27002, "version" : "4.0.2", "gitVersion" : "fc1573ba18aee42f97a3bb13b67af7d837826b47" }, "plannerVersion" : 1, "namespace" : "xx.xxxxxx", "indexFilterSet" : false, "parsedQuery" : { }, "winningPlan" : { "stage" : "COLLSCAN", "direction" : "forward" }, "rejectedPlans" : [ ] } ] } }, "executionStats" : { "nReturned" : 3, "executionTimeMillis" : 0, "totalKeysExamined" : 0, "totalDocsExamined" : 3, "executionStages" : { "stage" : "SINGLE_SHARD", "nReturned" : 3, "executionTimeMillis" : 0, "totalKeysExamined" : 0, "totalDocsExamined" : 3, "totalChildMillis" : NumberLong(0), "shards" : [ { "shardName" : "data_set2", "executionSuccess" : true, "executionStages" : { "stage" : "COLLSCAN", "nReturned" : 3, "executionTimeMillisEstimate" : 0, "works" : 5, "advanced" : 3, "needTime" : 1, "needYield" : 0, "saveState" : 0, "restoreState" : 0, "isEOF" : 1, "invalidates" : 0, "direction" : "forward", "docsExamined" : 3 } } ] } }, "ok" : 1, "operationTime" : Timestamp(1649919959, 1), "$clusterTime" : { "clusterTime" : Timestamp(1649919959, 6), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } }
- COLLSCAN表示收集扫描,收集扫描表明mongod必须逐个文档扫描整个收集文档以识别结果,可能导致查询缓慢;
- executionStats.nReturned表示查询匹配并返回的文档数目;
- executionStats.totalKeysExamined为0 ,表示这个查询没有用到索引;
- executionStats.totalDocsExamined表示mongod总共扫描的文档个数,即检查的文档数目;
返回文档数目和检查的文档数目之间的差异可能表明,为了提高查询效率,查询可能会受益于索引的使用。
查询与索引
- 原文这里是通过对上一段查询条件字段创建索引,实现在有索引和没有索引的情况下,查询情况的对比。
比较索引的性能
- 比较索引的性能可以通过
hint()
和explain()
方法的联合使用。