Mongodb

Mongo 查詢在生產中需要 76 秒,但不使用 Mongo shell

  • December 20, 2014

我有一個查詢:

db.content.find({ "$or" : [ { "cik" : "0000764839"} , { "entitiesDetected.ids" : "ZqH9BvtitcYR88NKC"}], "pubDate" : { "$gt" : { "$date" : -2206281600000}}, "orderBy": {"pubDate": -1, "title": 1}}).explain()

根據 MMS 配置文件,在生產環境中,將數據返回給客戶端需要 76 秒。

但是當我在 Mongo shell 中執行相同的查詢時,我的 nscanned 為 12,而且速度非常快 - 7 毫秒。

那麼有什麼問題呢?我問彩信的人我的彩信檔案中是否有明顯的東西,他們似乎並不認為有什麼明顯的錯誤。在這一點上我很難過。

我在 Linode 2048(兩個核心 - 2GB 記憶體)上使用 Ubuntu 14.04。

您的驅動程序可能會添加超出索引的隱含排序順序,尤其是當您在任何這些欄位上使用複合索引時。您需要.explain()在應用程序的查詢中執行一個,然後在 mongo shell 查詢上執行並比較兩者的輸出。您還應該比較應用程序進行查詢與外殼程序進行查詢時記錄的日誌行。記下任何索引,尤其是複合索引,以及它們與查詢排序順序相比的排序順序。

引用自:https://serverfault.com/questions/653872