MongoDB中的索引操作

索引的管理

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

 

posted @ 2022-05-28 15:50  喻聪  阅读(542)  评论(0编辑  收藏  举报