2013-10-25 8 views
12

私はアグリゲーションパイプラインをmongo 2.4.4に持っており、アグリゲーションを高速化する必要があります。mongodbアグリゲーションフレームワークのインデックスの最適化

一致操作は、16個のフィールドに対する範囲照会で構成されます。私は.explain()メソッドを使って範囲クエリを最適化しました(つまり複合インデックスを作成する)。集約を最適化するための同様の機能はありますか?私のようなものを探しています:

db.col.aggregate([]).explain() 

また、私は右のインデックスの最適化に注力していますか?

+1

最新に不安定ありません:https://jira.mongodb.org/browse/SERVER-4504はそれまでありませんし、そのようなインデックスoptimsationがないようmathc過去の使用をされて何のインデックスが存在しません良いパス – Sammaye

+0

@Sammayeそれは間違っています、最もよくマッチします。 –

+0

@AsyaKamskyこれは私が今言ったことですが、私は実際に$グループ内の試合をPASTと言いました – Sammaye

答えて

14

最初の質問については、はい、集計を説明することができます。 1秒間

db.collection.runCommand("aggregate", {pipeline: YOUR_PIPELINE, explain: true}) 

彼らはパイプラインの最初に発生した場合、あなたは、範囲クエリを最適化するために作成するインデックスも、アグリゲーションパイプラインの$試合段階に適用されます。したがって、インデックスの最適化に専念することができます。

Pipeline Operators and Indexesを参照してください。 集計について

アップデート2

もっとを説明:バージョン2.4に、それは信頼できません。 2.6+ではクエリ実行データを提供しません。 https://groups.google.com/forum/#!topic/mongodb-user/2LzAkyaNqe0

アップデート1

凝集のトランスクリプトは、MongoDBの2.4.5で説明します。

$ mongo so 
MongoDB shell version: 2.4.5 
connecting to: so 
> db.q19329239.runCommand("aggregate", {pipeline: [{$group: {_id: '$user.id', hits: {$sum: 1}}}, {$match: {hits: {$gt: 10}}}], explain: true}) 
{ 
    "serverPipeline" : [ 
     { 
      "query" : { 

      }, 
      "projection" : { 
       "user.id" : 1, 
       "_id" : 0 
      }, 
      "cursor" : { 
       "cursor" : "BasicCursor", 
       "isMultiKey" : false, 
       "n" : 1031, 
       "nscannedObjects" : 1031, 
       "nscanned" : 1031, 
       "nscannedObjectsAllPlans" : 1031, 
       "nscannedAllPlans" : 1031, 
       "scanAndOrder" : false, 
       "indexOnly" : false, 
       "nYields" : 0, 
       "nChunkSkips" : 0, 
       "millis" : 0, 
       "indexBounds" : { 

       }, 
       "allPlans" : [ 
        { 
         "cursor" : "BasicCursor", 
         "n" : 1031, 
         "nscannedObjects" : 1031, 
         "nscanned" : 1031, 
         "indexBounds" : { 

         } 
        } 
       ], 
       "server" : "ficrm-rafa.local:27017" 
      } 
     }, 
     { 
      "$group" : { 
       "_id" : "$user.id", 
       "hits" : { 
        "$sum" : { 
         "$const" : 1 
        } 
       } 
      } 
     }, 
     { 
      "$match" : { 
       "hits" : { 
        "$gt" : 10 
       } 
      } 
     } 
    ], 
    "ok" : 1 
} 

サーバーバージョン。

$ mongo so 
MongoDB shell version: 2.4.5 
connecting to: so 
> db.version() 
2.4.5 
+0

あなたはあなたができないと考えるべきではない、バージョンが不安定で変更される可能性があります – Sammaye

+0

いいえ、MongoDB 2.4で集計を説明することはできません。私はいつもそれをする。 – Rafa

+0

本当に??それを証明できますか?説明の出力を表示するかもしれませんか? – Sammaye

関連する問題