MongoDB 查询慢的原因有很多,通常可以归纳为索引问题、数据模型问题、查询写法问题、硬件/配置问题、集群架构问题等几类。下面系统地给你梳理一下常见原因和优化思路。
$where、regex 开头模糊匹配等无法走索引的写法表现:
COLLSCAN(全集合扫描)
排查:
db.collection.find({...}).explain("executionStats")
看 winningPlan.inputStage.stage 是否为 COLLSCAN
✅ 优化:
^abc 以外的正则✅ 优化:
hint() 强制索引(调试用)find({status:1}).sort({createdAt:-1})
如果 createdAt 没在索引里,会触发内存排序(非常慢)
✅ 索引示例:
{ status: 1, createdAt: -1 }
find({}) // 返回整个文档
✅ 优化:
find({}, {name:1, age:1})
limit 没用✅ 优化:
limit + skip 或 基于 _id 游标分页skip 很大)$in 元素过多$or 多条件✅ 优化:
✅ 方案:
MongoDB 依赖 WiredTiger 缓存
✅ 排查:
mongostat
看 cache 使用率、faults
✅ 优化:
wiredTigerCacheSizeGBreadPreference: secondary
✅ 优化:
✅ 优化:
db.setProfilingLevel(1, { slowms: 100 })
db.system.profile.find().sort({ts:-1}).limit(10)
db.collection.find({...}).explain("executionStats")
MongoDB 查询慢,90% 是“没走索引”或“索引用错”,剩下的是数据模型和硬件问题。
如果你愿意,可以把:
explain 结果贴出来,我可以直接帮你定位具体原因。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。