2016-06-09 106 views
1

我有一個包含250K文檔的集合,我想找到最後一個插入了索引的特定屬性「siteid」。這是我正在使用的查詢。Mongodb查詢性能

db.getCollection('txnCollection').find({"siteid":"123456"}).limit(1).sort({"_id":-1}) 

如果有記錄,則很快找到它。如果沒有性能不夠快,大約0.8s。

但是,如果我運行查詢

db.getCollection('txnCollection').find({"siteid":"123456"}).limit(1) 

的表現即使與SITEID沒有文檔123456

看來愚蠢,如果一個記錄返回到再運行此查詢的真快運行第二個查詢來獲取我想要的記錄 - 即。最後插入的一個,但我不能工作了做什麼都好

對於信息的一種方式,當我運行解釋,結果我得到的是

{ 
    "queryPlanner" : { 
     "plannerVersion" : 1, 
     "namespace" : "txn.txnCollection", 
     "indexFilterSet" : false, 
     "parsedQuery" : { 
      "siteid" : { 
       "$eq" : "123456" 
      } 
     }, 
     "winningPlan" : { 
      "stage" : "SORT", 
      "sortPattern" : { 
       "_id" : -1 
      }, 
      "limitAmount" : 1, 
      "inputStage" : { 
       "stage" : "KEEP_MUTATIONS", 
       "inputStage" : { 
        "stage" : "FETCH", 
        "inputStage" : { 
         "stage" : "IXSCAN", 
         "keyPattern" : { 
          "siteid" : 1 
         }, 
         "indexName" : "siteid_1", 
         "isMultiKey" : false, 
         "direction" : "forward", 
         "indexBounds" : { 
          "siteid" : [ 
           "[\"123456\", \"123456\"]" 
          ] 
         } 
        } 
       } 
      } 
     }, 
     "rejectedPlans" : [] 
    }, 
    "serverInfo" : { 
     "host" : "XXXXX", 
     "port" : 27017, 
     "version" : "3.0.6", 
     "gitVersion" : "1ef45a23a4c5e3480ac919b28afcba3c615488f2" 
    }, 
    "ok" : 1 
} 
+0

我找不到問題,請編輯,以便您的問題明確 –

+0

我在查詢或索引中做錯了什麼。有沒有辦法找到即使不存在也能快速返回的最新記錄。 – user3782299

+0

很顯然,79教授已經在試圖回答你了,所以他比我理解得更好,PLZ無視評論 –

回答

0

sortlimit使用的一點是,sort是在執行limit之前應用.....這意味着您的完整查詢結果將被排序,然後被限制。

+0

如果我取消限制。沒有記錄的網站ID時沒有快速返回。如果我再分類。它真的很慢。它仍然沒有返回。 – user3782299

+0

檢查[這一個](http://stackoverflow.com/a/34118358/5919473) – profesor79

+0

如果它是昂貴的,是否有辦法關閉它。自從我的查詢開始以來,我擔心性能不再是新增記錄。 – user3782299