索引的管理
1 创建索引
db.集合名词.ensureIndex(<keys>,<options>);
db.requestLog.ensureIndex({'createTime':-1});
options:创建索引时刻定义的索引参数,可选参数如下:
Parameter | Type | Description |
backgroud | Boolean | 建索引过程阻塞其他数据库操作,默认为fasle, 当集合数据量大时,创建索引需要大量的时间 |
unique | Boolean | 建立的索引是否唯一,默认为false, 指定为true创建唯一索引 |
expireAfterSeconds | Integer | 指定一个以秒为单位的数据,完成TTL设定,设定集合的生存时间 |
name | String | 索引的名称 |
2 查看索引
db.集合名.getIndexes();
// 查看集合的key
db.集合名.getIndexKey();
// 查看索引详情
db.集合名.getIndexSpecs();
// 查看索引大小,is_detail可选,可传0,1,true,false
db.集合名.totalIndexSize(is_detail);
// 重建索引,可减少索引存储空间,减少索引碎片,优化索引查询效率,
// 一般在数据大量变化后,会使用重建索引来提升索引性能,重建索引是删除原索引重新创建的过程,不建议反复使用
db.集合名.reIndex();
3 删除索引
db.集合名.dropIndex( '索引名' )
// 删除所有的自建索引
db.集合名.dropIndexes();
4 索引的额外属性
4.1 唯一索引(unique index)
db.student.creatIndex( { 'name':1 }, { 'unique': true } );
4.2 ttl索引
可以针对某个时间字段,指定文档的过期时间
db.stu.ensureIndex( {'birth':1} , {'expireAfterSeconds': 3} ) ;
ttl索引不保证在到期后立即删除过期数据。
文档的到期时间与mongodb从数据库中删除文档的时间之间可能存在延迟。
删除过期文档的后台任务每60秒运行一次,文档可能在文档到期和后台运行之间的期间保留在集合中。
TTL索引不能作为即时数据过期依据。
4.3 部分索引 (partial index)
db.stu.createIndex( {'name':1}, { 'particalFilterExpression': {‘age’ : {$gt: 25} } }) ;
业务需求变更永无休止,技术前进就永无止境!