2016-04-14 14 views
2

Her belgede locked alanı bulunan bir koleksiyona sahibim. Aşağıdaki endeksine sahip: Ben gerçekleştirdiğinizdeMongoDB muhtemelen bir belge tarafından kapsanabilecek bir işlem için belgeleri tarama

{ 
    locked : 1 
} 

bu bir sayım işlemi

db.scheduled.find({locked: false}).explain({executionStats:1}) 
{ 
     "queryPlanner" : { 
       "plannerVersion" : 1, 
       "namespace" : "connectivity_recruiter.scheduled", 
       "indexFilterSet" : false, 
       "parsedQuery" : { 
         "locked" : { 
           "$eq" : false 
         } 
       }, 
       "winningPlan" : { 
         "stage" : "FETCH", 
         "inputStage" : { 
           "stage" : "IXSCAN", 
           "keyPattern" : { 
             "locked" : 1 
           }, 
           "indexName" : "locked_1", 
           "isMultiKey" : false, 
           "direction" : "forward", 
           "indexBounds" : { 
             "locked" : [ 
               "[false, false]" 
             ] 
           } 
         } 
       }, 

     ..... 

     "executionStats" : { 
       "executionSuccess" : true, 
       "nReturned" : 53045, 
       "executionTimeMillis" : 299, 
       "totalKeysExamined" : 53045, 
       "totalDocsExamined" : 53045, 
       "executionStages" : { 
         "stage" : "FETCH", 
         "nReturned" : 53045, 
         "executionTimeMillisEstimate" : 180, 
         "works" : 53046, 
         "advanced" : 53045, 
         "needTime" : 0, 
         "needFetch" : 0, 
         "saveState" : 417, 
         "restoreState" : 417, 
         "isEOF" : 1, 
         "invalidates" : 0, 
         "docsExamined" : 53045, 
         "alreadyHasObj" : 0, 
         "inputStage" : { 
           "stage" : "IXSCAN", 
           "nReturned" : 53045, 
           "executionTimeMillisEstimate" : 70, 
           "works" : 53046, 
           "advanced" : 53045, 
           "needTime" : 0, 
           "needFetch" : 0, 
           "saveState" : 417, 
           "restoreState" : 417, 
           "isEOF" : 1, 
           "invalidates" : 0, 
           "keyPattern" : { 
             "locked" : 1 
           }, 
           "indexName" : "locked_1", 
           "isMultiKey" : false, 
           "direction" : "forward", 
           "indexBounds" : { 
             "locked" : [ 
               "[false, false]" 
             ] 
           }, 
           "keysExamined" : 53045, 
           "dupsTested" : 0, 
           "dupsDropped" : 0, 
           "seenInvalidated" : 0, 
           "matchTested" : 0 
         } 
       }, 
     ........... 
} 
üzerinde açıklamak

totalDocsExamined tüm belgeleri bunları saymak için taranırken bu operasyon olabilir iken, işaret gibi görünüyor indeksi tek başına kullanarak gerçekleştirilir. Neler oluyor? Bu normal mi? Koleksiyonun tam taraması devam ediyor mu?

Teşekkür

cevap

0

Tüm iade belgeler incelendi, endeks belgeleri almak için değil filtrelemek için sadece kullanıldı.

Açıklamanıza bakarsanız, dokümanlar sayısının incelenen belgelerin sayısına eşit olduğunu fark edersiniz.

Neden böyle? Dizininiz, belgenin tamamını getirirken yalnızca bir alan içerir, mongodb anahtarların indeksini sorgulamak için ne yapar ve sonra belgeyi almak için koleksiyona gider.

İndeks tüm yansıtılan alanları içerdiğinde, tek durum, incelenecek bir belgenin ele alınacak sorguları içermemesidir.

Daha fazla bilgi için şu bağlantıya bakın: https://docs.mongodb.com/manual/core/query-optimization/#covered-query