索引的管理

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} }  })  ;

 

业务需求变更永无休止,技术前进就永无止境!