各位大大,是這樣的,比如有下面的查詢陳述句:
> db.comment.find({"topicId":"xxxx"}).limit(10).sort({"createTime":1})現在有2種情況:
1.在comment表中,topicId和createTime均已經設定為升序索引。并且根據條件{"topicId":"xxxx"} 是查詢不出任何資料的,此時,整個查詢時間耗時比較長。
2.在comment表中,topicId設定為升序索引,createTime不是索引欄位,并且根據條件{"topicId":"xxxx"} 是查詢不出任何資料的,此時,整個查詢時間耗時非常短。
根據explain查看發現:
第一種情況進行了全表掃描。
第二種情況沒有進行全表掃描,但是發現了另外一個問題:加入符合{"topicId":"xxxx"} 的資料條數有8000條,但是根據explain發現:
"nscannedObjects" : 186657,"nscanned" : 186657。居然掃描了18w多個物件。
現在我的問題是:
1.針對于查詢結果集為空的情況(無結果回傳),并且做了排序操作,如果才能做到速度快?
2.明明符合查詢的資料條數只有8000多條,為什么explain的結果有18w多個檔案被掃描?
mongo新手求指導。。。
uj5u.com熱心網友回復:
沒人回答么。。。。uj5u.com熱心網友回復:
1 加topicId和createTime的聯合索引 db.comment.createIndex({topicId:1,createTime:1})2 掃描18萬個檔案才能過濾出出來那8000個
uj5u.com熱心網友回復:
請問你的具體index 是如何的呢?看起來像index并不是完全fetch 。
uj5u.com熱心網友回復:
謝謝大神的指導@rucypli, 添加了聯合索引之后, 問題解決了轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/82786.html
標籤:MongoDB
