mongodb笔记之--索引大纲

索引的作用:与关系型数据库一样,Mongodb中的索引也是用来加快查询速度的。

索引的本质:索引的本质其实就是存储了某个字段或某几个字段的值,并根据字段值进行了排序,然后便于我们快速查询.

索引的种类
1.默认的_ID
mongodb的每个集合都有一个_id字段,在这个字段上默认就存在索引了。

2.单键索引
在一个字段上创建索引,如下:

db.collectionName.createIndex({name:1});//姓名字段上创建索引

3.复合索引
在多个字段上创建联合索引,如下:

db.collectionName.createIndex({name:1,age:-1,address:1})

复合索引比单键索引丰富很多,例如这里 {name:1,age:-1,address:1}还包含有{name:1},{name:1,age:-1}这俩个隐式索引的. 也就是说我们查找类似于 find({name:‘张三’})或者find({name:‘李四’,age:20})的时候也可以用到这个复合索引. 但是find({age:‘李四’})之类的就命中不了这个复合索引

4.文本索引
monodb支持在字符串的内容上进行文本检索的查询操作。
一个集合最多只能有一个文本索引

创建:

db.colletionName.createIndex({fileName1:"text",fileName2:"text"});

使用:
使用$text操作符,在一个有文本索引的集合上执行文本检索

db.collectionName.find({$text:{$search:"java shop"}})//查询所有包含java或者shop的文档

5.地理位置索引
6.哈希索引

索引的属性
1.唯一索引

db.collectionName.createIndex({a:1,b:1,c:1},{unique:true})

唯一索引能保证索引的字段不会出现相同的值(相当于具有’索引’+'唯一约束’功能)

2.TTL索引
TTL索引的作用是对某个日期字段配置过期属性,然后就能实现对文档自动过期删除。
注意:必须是日期字段

db.collectionName.createIndex({"lastModifiedDate":1},{expireAfterSeconds:3600})  //单位是秒

MongoDB会开启一个后台线程读取该TTL索引的值来判断文档是否过期,但不会保证已过期的数据会立马被删除,因后台线程每60秒触发一次删除任务,且如果删除的数据量较大,会存在上一次的删除未完成,而下一次的任务已经开启的情况,导致过期的数据也会出现超过了数据保留时间60秒以上的现象。
对于副本集而言,TTL索引的后台进程只会在primary节点开启,在从节点会始终处于空闲状态,从节点的数据删除是由主库删除后产生的oplog来做同步。
TTL索引除了有expireAfterSeconds属性外,和普通索引一样

3.部分索引
只针对符合某个特定条件的文档建立索引
4.稀疏索引
只针对存在索引字段的文档建立索引.
非稀疏的索引会索引每篇文档,如果某个文档中索引字段不存在则会存个null值。

弊端
索引虽然能提高查询效率,但会降低写入性能.
因为每次数据库的写操作都会导致索引的位置的移动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值