4-1 索引简介
索引的种类:
_id索引
单键索引
多键索引
复合索引
过期索引
全文索引
地理位置索引
4-2 _id索引
_id索引是绝大多数集合默认建立的索引。
对于每个插入的数据,MongoDB都会自动生成一条唯一的_id字段。
_id索引会在插入时自动创建。
4-3 单键索引
1. 单键索引是最普通的索引
例如:一条记录,形式为:{x:1,y:2,z:3}
2.与_id索引不同,单键索引不会自动创建
db.mycollection.ensureIndex({x:1})
4-4 多键索引
多键索引与单键索引创建形式相同,区别在于字段的值。
单键索引:值为一个单一的值,例如字符串,数字或者日期。
多键索引:值具有多个记录,例如数组。
例如:db.mycollections.insert({x:[1,2,3,4,5]});
对于这条数据来讲,MongoDB认为x创建了一个多键索引。
4-5 复合索引
当我们的查询条件不只有一个时,就需要建立复合索引。
例如:插入{x:1,y:2,z:3}记录,若想按照x与y的值查询,则需要建立复合索引:
db.collection.ensureIndex({x:1,y:1})
4-6 过期索引
1. 过期索引,顾名思义,是在一段时间后会过期的索引。
2. 在索引过期后,相应的数据会被删除。
3. 这适合存储在一段时间后会是小的数据比如用户登录信息,存储的日志。
4.建立方法:
db.collection.ensureIndex({time:1},{expireAfterSeconds:10})
//expireAfterSeconds参数用来设定过期索引的过期时间。
4-7 过期索引案例演示
db.newcollection.ensureIndex({time:1},{expireAfterSeconds:30})
db.newcollection.insert({time:new Date()})
按照过期索引配置,{time:new Date()}这条记录,会在30s后被删除。
过期索引的使用限制
1. 存储在过期索引字段的值必须是指定的时间类型。
说明:必须是ISODate或者ISODate数组,不能使用时间戳,否则不能被自动删除。
2. 如果指定了ISODate数组,则按照最小的时间进行删除。
即:若time包含了3个时间,则只有一个时间到达了过期索引的限制时间,他就会被删除。
3.过期索引不能是复合索引。
4.删除时间是不精确的。
说明:删除过程是由后台程序每60s跑一次,而且删除也需要一些时间,所以存在误差。即在数据量不大的情况下,最小时间间隔为60秒。