2012-12-19 48 views
2

我試着去檢查查詢和林不知道什麼是「nscannedObjectsAllPlans」和「nscannedAllPlans」正在做,因爲我看到,如果我直接運行一個查詢關閉索引字段「purchaseState」什麼MongoDB中的nscannedObjectsAllPlans解釋平均

我得到掃描 「nscannedObjects」 項目相同的結果, 「nscanned」, 「nscannedObjectsAllPlans」 和 「nscannedAllPlans

然而,一旦我加了價大於400進入查詢 nscannedObjectsAllPlans現在比nscannedObjects 我想知道如果nscannedObjectsAllPlans是掃描對象的總數大於與purchase_state_Id一起運行與purchase_state指標計劃指數? 或者它只是陳述兩個指數計劃結果中的大?

我添加索引來pruchase狀態 然後我加入對購買狀態和Id

db.toys.ensureIndex({ 「purchaseState」:1})的索引

db.toys.ensureIndex( {「purchaseState」:1,「_id」:1})

  **db.toys.find({"purchaseState" : "NY"}).pretty().explain()** 

       "cursor" : "BtreeCursor purchaseState_1", 
       "isMultiKey" : false, 
       "n" : 1596, 
       "nscannedObjects" : 1596, 
       "nscanned" : 1596, 
       "nscannedObjectsAllPlans" : 1596, 
       "nscannedAllPlans" : 1596, 
       "scanAndOrder" : false, 
       "indexOnly" : false, 
       "nYields" : 0, 
       "nChunkSkips" : 0, 
       "millis" : 3, 
       "indexBounds" : { 
         "purchaseState" : [ 
           [ 
             "NY", 
             "NY" 
           ] 
         ] 
       }, 
       "server" : "XXXXXXX:27017" 

      **db.toys.find({"purchaseState" : "NY", "price": { $gt : 400 }}).pretty().explain()** 

       "cursor" : "BtreeCursor purchaseState_1", 
       "isMultiKey" : false, 
       "n" : 1423, 
       "nscannedObjects" : 1596, 
       "nscanned" : 1596, 
       "nscannedObjectsAllPlans" : 1808, 
       "nscannedAllPlans" : 1808, 
       "scanAndOrder" : false, 
       "indexOnly" : false, 
       "nYields" : 0, 
       "nChunkSkips" : 0, 
       "millis" : 10, 
       "indexBounds" : { 
         "purchaseState" : [ 
           [ 
             "NY", 
             "NY" 
           ] 
         ] 
       }, 
       "server" : "XXXXXXX:27017" 

回答

2

MongoDB的並行運行不同的保險計劃,並選擇它的最好的之一,記住計劃那樣的數據集。它還會在該集合之後自動爲每1000次寫入計劃設定一個計劃,以確保他們擁有正確的計劃以進一步處理類似的查詢。

nscannedObjectsAllPlans意味着當您運行一個查詢並讓我們說,他們有兩個不同的計劃,它顯示計數。

沒有明確的文檔可用於nscannedObjectsAllPlans/nscannedAllPlans。我已經通過了MongoDB course,在那裏也沒有解釋,但它採用最佳方案的方式,間接地爲nscannedAllPlans提供了答案。

希望這會有所幫助!

+0

謝謝,我正在尋找這方面的文檔,但猜測真的沒有太多。 – crackhaus

+0

@crackhaus不客氣。很高興,你覺得它很有幫助。該產品和文檔處於早期階段,希望隨着時間的推移它會有所改進。 – muruga

2

當MongoDB執行查詢時,它可能會嘗試並行執行多個不同的計劃以查看哪個最好。 nscannedAllPlans是所有計劃中掃描的ns的總和,以及nscannedObjectsAllPlans/nscannedObjects的總和。