mongodb索引

索引的概念

索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,通过索引可以快速找到我们查询的数据。提高查询效率

mongodb索引种类

  1. _id索引
  2. 单键索引
  3. 多键索引

  4. 复合索引

  5. 过期索引
  6. 全文索引
  7. 地理位置索引

_id索引

mongodb中绝大多数集合默认建立的索引,对于每个插入的数据,MongoDB都会自动生成一条唯一的_id

单键索引

单键索引是最普通的索引,直接将一个属性作为索引。但是需要手动创建

db.test.ensureIndex({x:1})//创建索引,索引可以重复创建,若创建已经存在的索引,则            会直接返回成功。
            db.test.find()//查看数据

多键索引

多键索引与单键索引创建形式相同,区别在于字段的值。

  1. 单键索引:值为一个单一的值,如字符串,数字或日期。
  2. 多键索引:值具有多个记录,如数组。

    db.test.ensureIndex({x:[1,2,3,4,5]})

复合索引

查询多个条件时,建立复合索引
例如{x:1,y:2,z:3}这样一条数据,要按照x与y的值进行查询,就需要创建复合索引。

db.test.ensureIndex({x:1,y:1}) #1升序,-1降序
db.test.find({x:1,y:2}) #使用复合索引查询

过期索引

在一段时间后会过期的索引
在索引过期后,相应的数据会被删除
适合存储在一段时间之后会失效的数据,比如用户的登录信息、存储的日志等。

db.test.ensureIndex({time:1},{expireAfterSeconds:10}) #创建过期索引,time-字段,expireAfterSeconds在多少秒后过期,单位:秒

过期索引的限制

  • 存储在过期索引字段的值必须是指定的时间类型,必须是ISODate或者ISODate数组,不能使用时间戳,否则不能自动删除。

    例如 >db.test.insert({time:1}),这种是不能被自动删除的

  • 如果指定了ISODate数组,则按照最小的时间进行删除。
  • 过期索引不能是复合索引。因为不能指定两个过期时间。
  • 删除时间是不精确的。删除过程是由MongoDB的后台进程每60s跑一次的,而且删除也需要一定时间,所以存在误差

全文索引

这个没用过,不敢乱写

地理位置索引

。。。。。 同上

相关推荐