如果现在的数据集很大,构建索引会花费很长时间。可是,为了优化索引,我们必会通过explain命令,找出需要添加索引的字段。可是在生产环境中,要在大数据集建立所以,这简直是梦魇,如何解决呢。我们记了一次实验。

db.user.find({text:"sumongodb"}).explain();

provides information such as the following:

{ "cursor" : "BasicCursor",    

"indexBounds" : [ ],    

"nscanned" : 57594,    

"nscannedObjects" : 57594,    

"n" : 3 ,    

"millis" : 108 }

Cursor:BasicCursor表示没有用到索引(类似SQL数据库的全部扫描。)BtreeCursor表示使用了索引。 indexBounds:使用到的索引; nscanned:扫描的总记录数; nscannedObjects:扫描的总对象数;

这查询没有用到索引。

解决方法:

 由于我们的架构是复制集模式,所以建议先把从节点,移除集群。具体操作

1.先查看复制集状态:rs.status()找出secondary对应的name字段的值。例如

name:192.168.0.1:27017

2.在主机上移除从节点 :rs.remove('192.168.0.1;27017')

3.在该节点上建立索引text字段的索引。db.user.ensureIndex({"text":1})

4.之后,把该节点重新加回到replset中。切换主从操作