2016-03-25 3 views
0

MongoDBが新しく、1つのノードをかなり大きなデータベースでセットアップしようとしました。 1億行、140GB、10フィールド。 2つまたは3つのフィールドを組み合わせる多くの異なるクエリを計画しているため、1つを除くすべてのフィールドは別々のインデックスを持ちます。MongoDBの2つのフィールドの検索は、1つのフィールドの検索と比較して非常に遅いです。

私の問題は、MongoDBが複合検索で別々のインデックスを使用していないように見えることです。

db.alldata.find({ p: "степанович" }) 

この検索で​​は1秒未満で応答します。

db.alldata.find({ n: "иван" }) 

こちらも。

しかしdb.alldata.find({N: "иван"、P: "степанович"})

が完了するまで永久にかかります。私は何か間違っているのですか?我々はあまりにも多くの異なるクエリを持っているとさえ別のインデックスは、ほぼすべてのRAM(50ギガバイト)を取るので、私は組み合わせインデックスを使用したくない

インデックスが作成です。そしてそこにはで十分です。 OSはCentOS7、FSはxfsです(重要な場合)。

UPDATE:

db.alldata.find({ n: "иван", p: "степанович"}).explain("allPlansExecution") 

{ 
     "queryPlanner" : { 
       "plannerVersion" : 1, 
       "namespace" : "myDb.alldata", 
       "indexFilterSet" : false, 
       "parsedQuery" : { 
         "$and" : [ 
           { 
             "n" : { 
               "$eq" : "иван" 
             } 
           }, 
           { 
             "p" : { 
               "$eq" : "степанович" 
             } 
           } 
         ] 
       }, 
       "winningPlan" : { 
         "stage" : "FETCH", 
         "filter" : { 
           "n" : { 
             "$eq" : "иван" 
           } 
         }, 
         "inputStage" : { 
           "stage" : "IXSCAN", 
           "keyPattern" : { 
             "p" : 1 
           }, 
           "indexName" : "parentalName", 
           "isMultiKey" : false, 
           "isUnique" : false, 
           "isSparse" : false, 
           "isPartial" : false, 
           "indexVersion" : 1, 
           "direction" : "forward", 
           "indexBounds" : { 
             "p" : [ 
               "[\"степанович\", \"степанович\"]" 
             ] 
           } 
         } 
       }, 
       "rejectedPlans" : [ 
         { 
           "stage" : "FETCH", 
           "filter" : { 
        "p" : { 
               "$eq" : "степанович" 
             } 
           }, 
           "inputStage" : { 
             "stage" : "IXSCAN", 
             "keyPattern" : { 
               "n" : 1 
             }, 
             "indexName" : "firstName", 
             "isMultiKey" : false, 
             "isUnique" : false, 
             "isSparse" : false, 
             "isPartial" : false, 
             "indexVersion" : 1, 
             "direction" : "forward", 
             "indexBounds" : { 
               "n" : [ 
                 "[\"иван\", \"иван\"]" 
               ] 
             } 
           } 
         }, 
         { 
           "stage" : "FETCH", 
           "filter" : { 
             "$and" : [ 
               { 
                 "n" : { 
                   "$eq" : "иван" 
                 } 
               }, 
               { 
      "p" : { 
                   "$eq" : "степанович" 
                 } 
               } 
             ] 
           }, 
           "inputStage" : { 
             "stage" : "AND_SORTED", 
             "inputStages" : [ 
               { 
                 "stage" : "IXSCAN", 
                 "keyPattern" : { 
                   "n" : 1 
                 }, 
                 "indexName" : "firstName", 
                 "isMultiKey" : false, 
                 "isUnique" : false, 
                 "isSparse" : false, 
                 "isPartial" : false, 
                 "indexVersion" : 1, 
                 "direction" : "forward", 
                 "indexBounds" : { 
                   "n" : [ 
                     "[\"иван\", \"иван\"]" 
                   ] 
                 } 
               }, 
               { 
                 "stage" : "IXSCAN", 
                 "keyPattern" : { 
                   "p" : 1 
                 }, 
                 "indexName" : "parentalName", 
                 "isMultiKey" : false, 
                 "isUnique" : false, 
                 "isSparse" : false, 
                 "isPartial" : false, 
                 "indexVersion" : 1, 
                 "direction" : "forward", 
                 "indexBounds" : { 
                   "p" : [ 
                     "[\"степанович\", \"степанович\"]" 
                   ] 
                 } 
               } 
             ] 
           } 
         } 
       ] 
     }, 
     "executionStats" : { 
       "executionSuccess" : true, 
       "nReturned" : 31, 
       "executionTimeMillis" : 213504, 
       "totalKeysExamined" : 124244, 
       "totalDocsExamined" : 124244, 
       "executionStages" : { 
         "stage" : "FETCH", 
         "filter" : { 
           "n" : { 
             "$eq" : "иван" 
           } 
         }, 
         "nReturned" : 31, 
         "executionTimeMillisEstimate" : 13160, 
         "works" : 124246, 
         "advanced" : 31, 
         "needTime" : 124213, 
         "needYield" : 0, 
         "saveState" : 11965, 
         "restoreState" : 11965, 
         "isEOF" : 1, 
         "invalidates" : 0, 
         "docsExamined" : 124244, 
         "alreadyHasObj" : 0, 
         "inputStage" : { 
           "stage" : "IXSCAN", 
           "nReturned" : 124244, 
           "executionTimeMillisEstimate" : 240, 
           "works" : 124245, 
           "advanced" : 124244, 
           "needTime" : 0, 
           "needYield" : 0, 
           "saveState" : 11965, 
           "restoreState" : 11965, 
           "isEOF" : 1, 
           "invalidates" : 0, 
           "keyPattern" : { 
             "p" : 1 
           }, 
           "indexName" : "parentalName", 
           "isMultiKey" : false, 
           "isUnique" : false, 
           "isSparse" : false, 
           "isPartial" : false, 
           "indexVersion" : 1, 
           "direction" : "forward", 
           "indexBounds" : { 
             "p" : [ 
               "[\"степанович\", \"степанович\"]" 
             ] 
           }, 
           "keysExamined" : 124244, 
           "dupsTested" : 0, 
           "dupsDropped" : 0, 
           "seenInvalidated" : 0 
         } 
       }, 
       "allPlansExecution" : [ 
         { 
           "nReturned" : 18, 
           "executionTimeMillisEstimate" : 196410, 
           "totalKeysExamined" : 124245, 
           "totalDocsExamined" : 124245, 
           "executionStages" : { 
             "stage" : "FETCH", 
             "filter" : { 
               "p" : { 
                 "$eq" : "степанович" 
               } 
             }, 
             "nReturned" : 18, 
             "executionTimeMillisEstimate" : 196410, 
             "works" : 124245, 
             "advanced" : 18, 
             "needTime" : 124227, 
             "needYield" : 0, 
             "saveState" : 11965, 
             "restoreState" : 11965, 
            "isEOF" : 0, 
             "invalidates" : 0, 
             "docsExamined" : 124245, 
             "alreadyHasObj" : 0, 
             "inputStage" : { 
               "stage" : "IXSCAN", 
               "nReturned" : 124245, 
               "executionTimeMillisEstimate" : 240, 
               "works" : 124245, 
               "advanced" : 124245, 
               "needTime" : 0, 
               "needYield" : 0, 
               "saveState" : 11965, 
               "restoreState" : 11965, 
               "isEOF" : 0, 
               "invalidates" : 0, 
               "keyPattern" : { 
                 "n" : 1 
               }, 
               "indexName" : "firstName", 
               "isMultiKey" : false, 
               "isUnique" : false, 
               "isSparse" : false, 
               "isPartial" : false, 
               "indexVersion" : 1, 
               "direction" : "forward", 
               "indexBounds" : { 
                 "n" : [ 
                   "[\"иван\", \"иван\"]" 
                 ] 
               }, 
               "keysExamined" : 124245, 
               "dupsTested" : 0, 
               "dupsDropped" : 0, 
               "seenInvalidated" : 0 
             } 
           } 
         }, 
         { 
           "nReturned" : 13, 
           "executionTimeMillisEstimate" : 540, 
           "totalKeysExamined" : 124245, 
           "totalDocsExamined" : 13, 
           "executionStages" : { 
             "stage" : "FETCH", 
             "filter" : { 
               "$and" : [ 
                 { 
                   "n" : { 
                     "$eq" : "иван" 
                   } 
                 }, 
                 { 
                   "p" : { 
                     "$eq" : "степанович" 
                   } 
                 } 
               ] 
             }, 
             "nReturned" : 13, 
             "executionTimeMillisEstimate" : 540, 
             "works" : 124245, 
             "advanced" : 13, 
             "needTime" : 124232, 
             "needYield" : 0, 
             "saveState" : 11965, 
             "restoreState" : 11965, 
             "isEOF" : 0, 
             "invalidates" : 0, 
             "docsExamined" : 13, 
             "alreadyHasObj" : 0, 
             "inputStage" : { 
               "stage" : "AND_SORTED", 
               "nReturned" : 13, 
               "executionTimeMillisEstimate" : 490, 
               "works" : 124245, 
               "advanced" : 13, 
               "needTime" : 124232, 
               "needYield" : 0, 
               "saveState" : 11965, 
               "restoreState" : 11965, 
               "isEOF" : 0, 
               "invalidates" : 0, 
               "flagged" : 0, 
               "failedAnd_0" : 29865, 
               "failedAnd_1" : 29858, 
               "inputStages" : [ 
                 { 
                   "stage" : "IXSCAN", 
                   "nReturned" : 74468, 
                   "executionTimeMillisEstimate" : 250, 
                   "works" : 74468, 
                   "advanced" : 74468, 
                   "needTime" : 0, 
                   "needYield" : 0, 
                   "saveState" : 11965, 
                   "restoreState" : 11965, 
                   "isEOF" : 0, 
                   "invalidates" : 0, 
                   "keyPattern" : { 
                     "n" : 1 
                   }, 
                   "indexName" : "firstName", 
                   "isMultiKey" : false, 
                   "isUnique" : false, 
                   "isSparse" : false, 
                   "isPartial" : false, 
                   "indexVersion" : 1, 
                   "direction" : "forward", 
                   "indexBounds" : { 
                     "n" : [ 
                       "[\"иван\", \"иван\"]" 
                     ] 
                   }, 
                   "keysExamined" : 74468, 
                   "dupsTested" : 0, 
                   "dupsDropped" : 0, 
                   "seenInvalidated" : 0 
                 }, 
                 { 
                   "stage" : "IXSCAN", 
                   "nReturned" : 49777, 
                   "executionTimeMillisEstimate" : 150, 
                   "works" : 49777, 
                   "advanced" : 49777, 
                   "needTime" : 0, 
                   "needYield" : 0, 
                   "saveState" : 11965, 
                   "restoreState" : 11965, 
                   "isEOF" : 0, 
                   "invalidates" : 0, 
                   "keyPattern" : { 
                     "p" : 1 
                   }, 
                   "indexName" : "parentalName", 
                   "isMultiKey" : false, 
                   "isUnique" : false, 
                   "isSparse" : false, 
                   "isPartial" : false, 
                   "indexVersion" : 1, 
                   "direction" : "forward", 
                   "indexBounds" : { 
                     "p" : [ 
                       "[\"степанович\", \"степанович\"]" 
                     ] 
                   }, 
                   "keysExamined" : 49777, 
                   "dupsTested" : 0, 
                   "dupsDropped" : 0, 
                   "seenInvalidated" : 0 
                 } 
               ] 
             } 
           } 
         }, 
         { 
           "nReturned" : 31, 
           "executionTimeMillisEstimate" : 13160, 
           "totalKeysExamined" : 124244, 
           "totalDocsExamined" : 124244, 
           "executionStages" : { 
             "stage" : "FETCH", 
             "filter" : { 
               "n" : { 
                 "$eq" : "иван" 
               } 
             }, 
             "nReturned" : 31, 
             "executionTimeMillisEstimate" : 13160, 
             "works" : 124245, 
             "advanced" : 31, 
             "needTime" : 124213, 
             "needYield" : 0, 
             "saveState" : 11965, 
             "restoreState" : 11965, 
             "isEOF" : 1, 
             "invalidates" : 0, 
             "docsExamined" : 124244, 
             "alreadyHasObj" : 0, 
             "inputStage" : { 
               "stage" : "IXSCAN", 
               "nReturned" : 124244, 
               "executionTimeMillisEstimate" : 240, 
               "works" : 124245, 
               "advanced" : 124244, 
               "needTime" : 0, 
               "needYield" : 0, 
               "saveState" : 11965, 
               "restoreState" : 11965, 
               "isEOF" : 1, 
               "invalidates" : 0, 
               "keyPattern" : { 
          "p" : 1 
               }, 
               "indexName" : "parentalName", 
               "isMultiKey" : false, 
               "isUnique" : false, 
               "isSparse" : false, 
               "isPartial" : false, 
               "indexVersion" : 1, 
               "direction" : "forward", 
               "indexBounds" : { 
                 "p" : [ 
                   "[\"степанович\", \"степанович\"]" 
                 ] 
               }, 
               "keysExamined" : 124244, 
               "dupsTested" : 0, 
               "dupsDropped" : 0, 
               "seenInvalidated" : 0 
             } 
           } 
         } 
       ] 
     }, 
     "serverInfo" : { 
       "host" : "cass", 
       "port" : 27017, 
       "version" : "3.2.4", 
       "gitVersion" : "e2ee9ffcf9f5a94fad76802e28cc978718bb7a30" 
     }, 
     "ok" : 1 
} 
+1

あなたの投稿を説明結果で更新してください。 'db.alldata.find({n:"иван "、p:"степанович "})。explain(" allPlansExecution ")'。また、MongoDBのバージョンと、mmapまたはwiredtigerエンジンを使用している場合についても言及してください。 – Saleem

+0

公式のrepoとwiredTigerから "3.2.4"。 allPlansExecutionを追加しました。 –

+0

ありがとうございます。 'collection.getIndexes()'からも私に出力を送ってください。 – Saleem

答えて

0

私の問題は、MongoDBのが 組み合わせた検索に別のインデックスを使用していないようだということです。 MongoDBの2.6後

、MongoDBはIndex Intersection

をサポートしています。しかし、あなたが必要な場合は、インデックスを組み合わせて使用​​する必要があります。 prefixesは非常に処理することができますので。

インデックスを使用しても、クエリは非常に重要です。したがって、Create Queries that Ensure Selectivityに基づいてクエリを使用する必要があります。したがって、使用するインデックスを選択するか、クエリにインデックスを使用しないでください。hint()を使用する必要があります。

あなたはこのコンセプトを理解した後、measure your indexesになり、あなたの期待に最も適したものを選ぶことができます。

+0

信じられませんが、助けにはなりませんでした。私はdb.alldata.find(blabla).hint( "surname"、 "firstname")を実行し、クエリは数分間動作します。私の10億の行には、多くの非一意の値があります。私はこれを変更することはできません。 –

+0

興味深い。 MongoDBでは、2つのインデックスを持つヒントを名前で指定できますが、実際には2番目のインデックスは使用しません。そして、ヒントの2番目のインデックスを列名で設定することはできません。したがって、おそらく、私は複合インデックスを使用する必要があります。 –

+0

moongodbのバージョンは何ですか? –

関連する問題