记一次索引构建问题
?如果現在的數據集很大,構建索引會花費很長時間。可是,為了優化索引,我們必會通過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中。切換主從操作
?
?
?
?
?
總結
- 上一篇: UIView的旋转iOS开发
- 下一篇: 梦到妈妈不在了怎么回事