一、索引創建策略
- 按查詢需求選擇類型
- 單字段索引:適用于高頻單字段查詢,如
db.collection.createIndex({ field: 1 })
。
- 復合索引:用于多字段組合查詢,字段順序按查詢頻率和選擇性排序(高選擇性字段在前),如
db.collection.createIndex({ field1: 1, field2: -1 })
。
- 覆蓋索引:包含查詢所需字段,避免回表查詢,如
db.collection.createIndex({ field1: 1, field2: 1 })
。
- 避免過度索引
- 每個索引會增加寫入開銷和存儲空間,刪除冗余索引(通過
db.collection.getIndexes()
查看并刪除未使用的索引)。
二、索引優化技巧
- 利用索引特性
- 多鍵索引:自動為數組字段的每個元素創建索引,支持數組查詢。
- 地理空間索引:用于地理位置查詢,如
db.collection.createIndex({ location: "2dsphere" })
。
- TTL索引:自動刪除過期數據,如
db.collection.createIndex({ createdAt: 1 }, { expireAfterSeconds: 3600 })
。
- 優化查詢語句
- 使用
explain("executionStats")
分析查詢計劃,確保索引被正確使用。
- 通過
hint()
強制使用指定索引(謹慎使用,避免人為干預優化器)。
三、維護與監控
- 定期維護索引
- 重建索引:使用
reIndex()
清理碎片,提升性能。
- 監控索引使用率:通過MongoDB監控工具(如MongoDB Atlas、Ops Manager)查看索引命中率和慢查詢。
- 硬件與配置優化
- 使用SSD存儲索引文件,提升I/O性能。
- 調整WiredTiger緩存大?。?code>cacheSizeGB參數),確保索引和數據可緩存。
四、高級策略
- 分片與復制集
- 大數據集使用分片(Sharding)分散負載,提升查詢吞吐量。
- 配置復制集(Replica Set)保障數據高可用。
- 特殊場景索引
- 文本索引:支持全文搜索,但性能較低,僅適用于小規模文本字段。
- 哈希索引:用于分片鍵,確保數據均勻分布。
參考來源:[1,2,3,4,5,6,7,8,9,10,11]