最近遇到的一个MongoDB索引顺序的问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了最近遇到的一个MongoDB索引顺序的问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含10769字,纯文字阅读大概需要16分钟。
内容图文
![最近遇到的一个MongoDB索引顺序的问题](/upload/InfoBanner/zyjiaocheng/875/2fbe1b15745f4ea8b11172e9b75e5dba.jpg)
最近遇到个mongo慢查问题,查询这样子:
db.tb1.find({status:'normal', lastReviewTime:{$gte:1583038740,$lte:1585285140}}).sort({createdTime:-1}).limit(30)
执行计划如下:
> db.tb1.find({status:'normal', lastReviewTime:{$gte:1583038740,$lte:1585285140}}).sort({createdTime:-1}).limit(30).explain() { "queryPlanner" : { "plannerVersion" : 1, "namespace" : "db1.tb1", "indexFilterSet" : false, "parsedQuery" : { "$and" : [ { "status" : { "$eq" : "normal" } }, { "lastReviewTime" : { "$lte" : 1585285140 } }, { "lastReviewTime" : { "$gte" : 1583038740 } } ] }, "winningPlan" : { "stage" : "SORT", "sortPattern" : { "createdTime" : -1 }, "limitAmount" : 30, "inputStage" : { "stage" : "SORT_KEY_GENERATOR", "inputStage" : { "stage" : "FETCH", "filter" : { "$and" : [ { "lastReviewTime" : { "$lte" : 1585285140 } }, { "lastReviewTime" : { "$gte" : 1583038740 } } ] }, "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "status" : 1, "type" : 1, "executionTime" : 1 }, "indexName" : "idx_stats_typ_execTime", # 走的这个索引 "isMultiKey" : false, "multiKeyPaths" : { "status" : [ ], "type" : [ ], "executionTime" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "status" : [ "[\"normal\", \"normal\"]" ], "type" : [ "[MinKey, MaxKey]" ], "executionTime" : [ "[MinKey, MaxKey]" ] } } } } }, "rejectedPlans" : [ { "stage" : "SORT", "sortPattern" : { "createdTime" : -1 }, "limitAmount" : 30, "inputStage" : { "stage" : "SORT_KEY_GENERATOR", "inputStage" : { "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "lastReviewTime" : 1, "status" : 1, "createdTime" : -1 }, "indexName" : "lastReviewTime_1_status_1_createdTime_-1", "isMultiKey" : false, "multiKeyPaths" : { "lastReviewTime" : [ ], "status" : [ ], "createdTime" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "lastReviewTime" : [ "[1583038740.0, 1585285140.0]" ], "status" : [ "[\"normal\", \"normal\"]" ], "createdTime" : [ "[MaxKey, MinKey]" ] } } } } }, { "stage" : "SORT", "sortPattern" : { "createdTime" : -1 }, "limitAmount" : 30, "inputStage" : { "stage" : "SORT_KEY_GENERATOR", "inputStage" : { "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "lastReviewTime" : -1, "status" : 1 }, "indexName" : "lastReviewTime_-1_status_1", "isMultiKey" : false, "multiKeyPaths" : { "lastReviewTime" : [ ], "status" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "lastReviewTime" : [ "[1585285140.0, 1583038740.0]" ], "status" : [ "[\"normal\", \"normal\"]" ] } } } } } ] }, "ok" : 1 }
这种情况下,我们的索引顺序需要注意下,这样写:
{精确匹配字段,排序字段,范围查询字段} 这样的索引排序会更为高效
db.tb1.createIndex({status:1,createdTime:-1,lastReviewTime:1},{background:true})
加完索引后,可以发现查询速度有质的飞越了。
内容总结
以上是互联网集市为您收集整理的最近遇到的一个MongoDB索引顺序的问题全部内容,希望文章能够帮你解决最近遇到的一个MongoDB索引顺序的问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。