mongoDB中常用的索引属性 如唯一,局部,稀疏,TTL,后台方式等

编程入门 行业动态 更新时间:2024-10-28 06:35:58
db.userinfos.insertMany([{_id:1, name: "张三", age: 23,level:10, ename: { firstname: "san", lastname: "zhang"}, roles: ["vip","gen" ]},{_id:2, name: "李四", age: 24,level:20, ename: { firstname: "si", lastname: "li"}, roles:[ "vip" ]},{_id:3, name: "王五", age: 25,level:30, ename: { firstname: "wu", lastname: "wang"}, roles: ["gen","vip" ]},{_id:4, name: "赵六", age: 26,level:40, ename: { firstname: "liu", lastname: "zhao"}, roles: ["gen"] },{_id:5, name: "田七", age: 27, ename: { firstname: "qi", lastname: "tian"}, address:'北京' },{_id:6, name: "周八", age: 28,roles:["gen"], address:'上海' }
]);db.logs.insertMany([{ _id: 1, createtime: new Date(), msg: "log1" },{ _id: 2, createtime: new Date(), msg: "log2" },{ _id: 3, createtime: new Date(), msg: "log3" },{ _id: 4, createtime: new Date(), msg: "log4" }
])


1  唯一索引

唯一索引(unique indexes)用于为collection添加唯一约束,即强制要求collection中的索引字段没有重复值。注意:不能用到哈希索引上
添加唯一索引的语法:

db.userinfos.createIndex({"name":1},{unique:true})


2  局部索引

大白话来讲,就是满足一定的条件,才添加到索引  
局部索引(Partial Indexes)顾名思义,只对collection的一部分添加索引。创建索引的时候,根据过滤条件判断是否对document添加索引,对于没有添加索引的文档查找时采用的全表扫描,对添加了索引的文档查找时使用索引:

//userinfos集合中age>25的部分添加age字段索引db.userinfos.createIndex({age:1},{ partialFilterExpression: {age:{$gt: 25 }}})//查询age<25的document时,因为age<25的部分没有索引,会全表扫描查找(stage:COLLSCAN)db.userinfos.find({age:23})//查询age>25的document时,因为age>25的部分创建了索引,会使用索引进行查找(stage:IXSCAN)db.userinfos.find({age:26})

 结论:当查询age=23的记录时,stage=COLLSCAN,当查询age=26的记录时,使用了索引


稀疏索引 

 大白话来讲,就是一条记录,必须包含此字段,才会建索引,如

//在address字段上建稀疏索引
db.userinfos.createIndex({ address: 1 }, { sparse: true })//演示索引失效的情况
//如果一个间隙索引会导致查询或者排序操作得到一个不完整结果集的时候,MongoDB将不会使用这个索引
db.userinfos.find().sort({ address: 1 }).explain()//强制走索引,注意:查询的记录会不全,只查到有address字段的记录
db.userinfos.find().hint({ address: 1 })

 

4 TTL索引

  TTL索引(TTL indexes)是一种特殊的单键索引,用于设置document的过期时间,mongoDB会在document过期后将其删除,TTL非常容易实现类似缓存过期策略的功能。

//在createtime字段添加TTL索引,过期时间是120s
//logs中的document在创建后的120s后过期,会被mongoDB自动删除
db.logs.createIndex({createtime:1}, { expireAfterSeconds: 120 })

注意:TTL索引只能设置在date类型字段(或者包含date类型的数组)上,过期时间为字段值+exprireAfterSeconds;document过期时不一定就会被立即删除,因为mongoDB执行删除任务的时间间隔是60s;
capped Collection 就是固定集合,不能设置TTL索引,因为mongoDB不能主动删除capped Collection中的document。
固定集合的详细描述,可查看博文
runoob./mongodb/mongodb-capped-collections.html


5 后台方式创建索引

默认情况下,MongoDB的ensureIndex()是阻塞型操作,会暂停数据库上所有正在进行的其他操作,直到创建索引完成。 
如果数据量很大很大,就可以采用此方式

db.userinfos.createIndex({"name":1,"age":1},{background: true} )


 

更多推荐

稀疏,局部,后台,索引,属性

本文发布于:2023-05-31 12:03:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/391392.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:稀疏   局部   后台   索引   属性

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!