Mongo索引优化

Mongo常用索引

单索引

复合索引:复合索引必须完全按照建索引的顺序来查

db.events.createIndex( { username: 1, date: -1 } )
#只能利用username: 1的排序
db.events.find().sort( { username: 1, date: 1 } )
#完全无法利用索引
db.events.find().sort( { date: 1 } )

多key索引:针对数据类型为数组的情况来建立索引

索引属性:

unique:用于限制索引的field是否具有唯一性属性,即保证该field的值唯一

db.members.createIndex( { "user_id": 1 }, { unique: true } )

partial:在索引的时候只针对符合特定条件的文档来建立索引,减少索引数量,节省空间,提高检索效率

db.restaurants.createIndex(
   { cuisine: 1, name: 1 },
   { partialFilterExpression: { rating: { $gt: 5 } } } //只有当rating大于5时才会建立索引
)

explain分析查询性能:db.table.find({}).explain("executionStats")关键就是这个语句

关于find和sort利用索引

关键点:

1.使用索引的顺序:equality->sort->range

2.find和sort里面同等级的会自动排序,会使之尽量满足索引

有趣的case:

索引:{"_id":1},{"score":1}

db.table.find({"score":100}).sort({"_id":-1}).limit(10)怎么利用索引?

避免内存排序,内存排序超过32M时会放弃

数据量少时会先使用score的索引,然后再去排序,数据量大时会利用_id的索引,扫描整个文档,最终速度很慢

原文地址:https://www.cnblogs.com/peterleee/p/14517912.html