一、索引创建与设计优化
username
和email
,可创建复合索引{username: 1, email: 1}
。db.collection.dropIndex()
)。二、索引维护与管理
db.collection.reIndex()
方法重建索引,优化索引结构。建议在低峰期执行,避免影响线上业务。db.collection.aggregate([{$indexStats: {}}])
命令查看索引的使用频率(如accesses.ops
表示索引被访问的次数)、命中率等指标,识别未使用或低效索引并及时清理。hint()
方法强制MongoDB使用特定索引(如db.collection.find(query).hint({field: 1})
),适用于查询优化器未选择最优索引的场景。需谨慎使用,避免人为干预导致性能下降。三、Linux环境下的硬件与配置优化
storage.wiredTiger.engineConfig.cacheSizeGB
设置为物理内存的50%-70%,避免占用过多内存影响系统和其他进程),减少磁盘I/O。mongod.conf
配置文件,优化关键参数。例如,调整wiredTiger
缓存大小(storage.wiredTiger.engineConfig.cacheSizeGB
)、设置合理的net.maxIncomingConnections
(控制并发连接数,避免过多连接导致资源耗尽)。四、查询优化与诊断
explain("executionStats")
方法分析查询计划(如winningPlan
表示MongoDB选择的执行计划),了解索引的使用情况(如是否使用了索引、索引扫描的类型),针对性优化查询语句。$where
(需执行JavaScript代码,无法利用索引)、$regex
(全表扫描,除非使用前缀匹配)等低效操作符;使用投影(projection
)指定返回字段(如{field1: 1, field2: 1}
),减少数据传输量;使用limit()
限制返回结果数量,避免一次性返回大量数据。五、分片与架构优化
user_id
),避免数据倾斜(如热点数据集中在某个分片)。