MongoDB在Ubuntu上的查询优化策略
free -m命令查看内存使用情况。ulimit -n),避免大量连接导致资源耗尽。编辑/etc/mongod.conf文件,调整关键参数:
net.maxIncomingConnections(默认10000,可根据需求增减);storage.wiredTiger.engineConfig.cacheSizeGB为物理内存的50%-70%(避免占用过多内存导致系统交换);operationProfiling.mode: "slowOp"并设置slowOpThresholdMs(如100ms),监控慢查询。username、email)创建单字段索引(db.users.createIndex({ username: 1 }));对多字段查询(如同时查username和email)使用复合索引(db.users.createIndex({ username: 1, email: 1 }));db.users.find({ age: { gt: 18 } }, { name: 1, age: 1, _id: 0 })),避免回表查询;db.collection.reIndex()重建碎片化索引;通过db.collection.explain("executionStats").find()分析查询计划,确认索引是否被有效使用;删除未使用的冗余索引(减少写操作开销)。db.users.find({}, { name: 1, email: 1 })),减少数据传输量和内存消耗;skip()和limit()分页(如db.users.find().skip(20).limit(10)),避免一次性加载过多数据;{}),尽量使用具体值或范围查询(如{ age: { gt: 18 } });db.users.createIndex({ age: 1 })),提升排序性能;match+group)组合成聚合管道(db.users.aggregate([{ $match: { age: { gt: 18 } } }, { $group: { _id: "$gender", count: { $sum: 1 } } }])),减少查询次数。mongostat监控数据库操作的吞吐量(如读写次数/秒)、mongotop查看集合级别的读写时间分布(定位慢查询集合);explain("executionStats")查看查询的执行计划(如是否使用索引、扫描文档数、执行时间),针对性优化;{ user_id: 1, orders: [{ product: "A", price: 100 }] }),减少JOIN操作;username复制到订单集合),减少跨集合查询次数。user_id分片),分散查询负载;compact命令压缩数据文件(减少磁盘空间占用)、repairDatabase修复损坏的数据文件(避免性能退化);