索引的概念
索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,通过索引可以快速找到我们查询的数据。提高查询效率
mongodb索引种类
- _id索引
- 单键索引
多键索引
复合索引
- 过期索引
- 全文索引
- 地理位置索引
_id索引
mongodb中绝大多数集合默认建立的索引,对于每个插入的数据,MongoDB都会自动生成一条唯一的_id
单键索引
单键索引是最普通的索引,直接将一个属性作为索引。但是需要手动创建
db.test.ensureIndex({x:1})//创建索引,索引可以重复创建,若创建已经存在的索引,则 会直接返回成功。
db.test.find()//查看数据
多键索引
多键索引与单键索引创建形式相同,区别在于字段的值。
- 单键索引:值为一个单一的值,如字符串,数字或日期。
- 多键索引:值具有多个记录,如数组。
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跑一次的,而且删除也需要一定时间,所以存在误差
全文索引
这个没用过,不敢乱写
地理位置索引
。。。。。 同上