2017-02-16 1 views
0

集計クエリが良好か悪いかを確認するにはどうすればよいですか?私はすでに "説明する"が使用されていますが、それは具体的ではありません。集計クエリの良否を確認するにはどうすればよいですか?

ここに私の集計 "explain"の出力があります。

{ 
    "waitedMS" : NumberLong(0), 
    "stages" : [ 
      { 
        "$cursor" : { 
          "query" : { 
            "keys.license_id" : ObjectId("580eeb7fb79bec95648775a2"), 
            "deleted.status" : { 
              "$ne" : 1 
            } 
          }, 
          "queryPlanner" : { 
            "plannerVersion" : 1, 
            "namespace" : "serpentsmsapp.conversations", 
            "indexFilterSet" : false, 
            "parsedQuery" : { 
              "$and" : [ 
                { 
                  "keys.license_id" : { 
                    "$eq" : ObjectId("580eeb7fb79bec95648775a2") 
                  } 
                }, 
                { 
                  "$not" : { 
                    "deleted.status" : { 
                      "$eq" : 1 
                    } 
                  } 
                } 
              ] 
            }, 
            "winningPlan" : { 
              "stage" : "COLLSCAN", 
              "filter" : { 
                "$and" : [ 
                  { 
                    "keys.license_id" : { 
                      "$eq" : ObjectId("580eeb7fb79bec95648775a2") 
                    } 
                  }, 
                  { 
                    "$not" : { 
                      "deleted.status" : { 
                        "$eq" : 1 
                      } 
                    } 
                  } 
                ] 
              }, 
              "direction" : "forward" 
            }, 
            "rejectedPlans" : [ ] 
          } 
        } 
      }, 
      { 
        "$sort" : { 
          "sortKey" : { 
            "_id" : 1, 
            "keys.license_id" : 1, 
            "status.deleted" : 1 
          } 
        } 
      }, 
      { 
        "$lookup" : { 
          "from" : "conversation_messages", 
          "as" : "cmf", 
          "localField" : "_id", 
          "foreignField" : "keys.conv_id", 
          "unwinding" : { 
            "preserveNullAndEmptyArrays" : false 
          } 
        } 
      }, 
      { 
        "$match" : { 
          "cmf.deleted.status" : 0 
        } 
      }, 
      { 
        "$sort" : { 
          "sortKey" : { 
            "cmf.deleted.status" : -1 
          } 
        } 
      }, 
      { 
        "$group" : { 
          "_id" : { 
            "id" : "$_id", 
            "number" : "$number", 
            "mode" : "$mode", 
            "keys" : "$keys", 
            "ports" : "$ports", 
            "user_assign" : "$user_assign", 
            "spam" : "$spam" 
          }, 
          "cm_field" : { 
            "$last" : { 
              "id" : "$cmf._id", 
              "message" : "$cmf.message", 
              "ports" : "$cmf.ports", 
              "mode" : "$cmf.mode", 
              "keys" : "$cmf.keys", 
              "status" : "$cmf.status", 
              "date" : "$cmf.updated" 
            } 
          }, 
          "counts" : { 
            "$sum" : "$cmf.status" 
          }, 
          "sms_mode" : { 
            "$addToSet" : "$cmf.mode" 
          } 
        } 
      }, 
      { 
        "$sort" : { 
          "sortKey" : { 
            "cm_field.date" : -1 
          }, 
          "limit" : NumberLong(5000) 
        } 
      }, 
      { 
        "$group" : { 
          "_id" : "$_id", 
          "cm_field" : { 
            "$last" : "$cm_field" 
          }, 
          "counts" : { 
            "$first" : "$counts" 
          }, 
          "sms_mode" : { 
            "$first" : "$sms_mode" 
          } 
        } 
      } 
    ], 
    "ok" : 1 

}

どのように私は私のクエリを実行する前にスキャンされますどのように多くのドキュメントを参照することができますか?

答えて

1

私はあなたに次の計画

  1. を示唆してあなたの問題を解決するためには、Explain仕事をする方法を学びます。
  2. 「良いか悪い」アプローチは技術的なアプローチではなく、常にさまざまな要因(要件、ハードウェアなど)に依存します。クエリが十分に機能している場合は、答える前にこれらの要件を定義する必要があります。

特定の説明ログ。 "COLSCAN" - 結果を集約するためにコレクション上のすべてのドキュメントを使用したことを示します。これは通常警告標識です。適切なindexesを使用することを検討する必要があります。

関連する問題