記一次索引構建問題

 如果現在的數據集很大,構建索引會花費很長時間。可是,爲了優化索引,我們必會通過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中。切換主從操作

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章