2026-03-20 11:41:25
MongoDB索引通过优化数据检索路径显著提升查询性能,合理使用不同类型的索引可实现查询速度的数量级提升。 以下从索引类型、创建方法、性能对比及管理策略四个方面展开说明:
一、普通索引:单字段查询加速无索引:查询耗时962毫秒,扫描200万条文档,执行类型为COLLSCAN(全表扫描)。
有索引:查询耗时143毫秒,仅扫描2000条文档,执行类型为FETCH+IXSCAN(索引扫描+文档检索),速度提升约7倍(1个数量级)。
单键索引:查询age在20-30岁且name为ryan1的文档时,强制使用age索引耗时2031毫秒,需扫描200万条文档。
复合索引:使用{"age":1, "name":1}索引耗时仅8毫秒,仅扫描2010条文档,速度提升254倍(2个数量级)。
错误顺序:{"age":1, "name":1}索引下对name排序需内存排序,耗时6882毫秒。
正确顺序:{"name":1, "age":1}索引下直接利用索引排序,耗时3毫秒,扫描2100条文档。
ensureIndex(旧版)与createIndex(新版)功能相同,推荐使用后者:db.person.createIndex({"age":1})
定期评估:业务变化可能导致索引失效,需通过explain("executionStats")分析查询性能。
删除冗余索引:如单键索引可能被复合索引替代,减少写入开销。
总结:MongoDB索引类型多样,普通索引加速单字段查询,复合索引优化多条件与排序,唯一索引保障数据唯一性,稀疏索引处理可选字段。通过createIndex创建、getIndexes查看、dropIndex删除,结合explain分析性能,可动态调整索引策略以适应业务需求。