2012-12-19 6 views
2

임 내가보기 때문 "nscannedObjectsAllPlans"와 "nscannedAllPlans는"무엇을하고 있는지 확실하지 쿼리 및 IM을 검사하려고 설명하지 무슨 나는 인덱스 필드 "purchaseState"하여 MongoDB에서 nscannedObjectsAllPlans이 평균

에서 직접 쿼리를 실행하는 경우

나는, "을 nscanned", "nscannedObjectsAllPlans"및 "nscannedAllPlans"

그러나 한 번을 "nscannedObjects"에 대한 항목을 스캔 같은 결과를 얻을 수 나는 nscannedObjectsAllPlans 내가 nscannedObjectsAllPlans 스캔 개체의 총 수 있는지 알고 싶어 nscannedObjects보다도 큰 쿼리로 (400)보다 큰 가격을 추가 그 purchase_state_Id와 함께 purchase_state 인덱스 계획을 실행 색인? 또는 두 개의 인덱스 계획 결과 중 더 큼을 언급하고 있습니까?

db.toys.ensureIndex (:

제가

I 구입 상태 이드

db.toys.ensureIndex ({1 "purchaseState"})에 대한 인덱스를 추가 한 후 상태를 pruchase에 대한 인덱스를 추가 { "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는 모든 계획에서 nscanned의 합계이고 nscannedObjectsAllPlans/nscannedObjects의 합계입니다.