2011-10-09 95 views
2

的MongoDB/Mongoid查詢緩慢我有一個mongoid模式是這樣的:在索引屬性

class Link 
    include Mongoid::Document 
    include Mongoid::Timestamps 
    field :url, type: String 

    index :url, background: true 
end 

現在我有2個查詢與分析打開:

Link.where(url: "http://stackoverflow.com/questions/ask").first # =># <Link _id .....> 

執行的< 1ms的,沒有緩慢的記錄

Link.where(url: "no url").first # =># nil 

執行= 35MS * PROFILER :: * 日10月9日23時36分二十秒[conn20]查詢ccc7.links ntoreturn:1 nscanned:16402個reslen:20 35MS

我的問題:

明確索引工作正常,但爲什麼一個不存在將mongodb這麼長時間查詢?甚至掃過整個mongo系列?是不是索引照顧這個?

+0

當您在mongo shell上執行查詢時,mongodb查詢解釋會顯示什麼內容? db.link.find({url:「no url」})。explain() – rit

回答

3

執行的= 35MS PROFILER ::太陽10月9日23點36分二十○秒[conn20]查詢ccc7.links ntoreturn:1 nscanned: reslen:20 35MS

很明顯,有一個問題。 事實上,如果您僅請求索引字段,則已掃描文檔的數量應該接近(等於)結果數量。

documentation

檢查項目(文件或索引項)的nscanned數。項目 可能是對象或索引鍵。如果涉及「覆蓋索引」,則掃描的 可能高於nscannedObjects。

正如建議您對請求的解釋應該提供更多信息。

你能同時提供的結果:

db.link.getIndexes() 
1

所以,並不完全清楚在這裏。所有的網址都是獨一無二的「無網址」選項。

如果是這樣,並且您按升序對該列編制索引,則會看到字母掃描結果爲「n」。由於您的所有網址都以h開頭,因此您可能會看到延遲。

不是100%正面,但它是一種可能性。