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的索引,扫描整个文档,最终速度很慢