web-dev-qa-db-ja.com

mongodb集約フレームワークのインデックス最適化

Mongo 2.4.4に_match-unwind-group-sort_集約パイプラインがあり、集約を高速化する必要があります。

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

_db.col.aggregate([]).explain()
_

また、インデックスの最適化に集中する権利はありますか?

19
Tom Swifty

最初の質問については、はい、集計について説明できます。

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

2つ目は、範囲クエリを最適化するために作成したインデックスが、集計パイプラインの$ matchステージで発生した場合にも適用されます。パイプラインの始まり。したがって、インデックスの最適化に集中するのは正しいことです。

パイプライン演算子とインデックス を参照してください。

アップデート2

aggregateおよびexplainの詳細:バージョン2.4では信頼性がありません。 2.6以降では、クエリ実行データは提供されません。 https://groups.google.com/forum/#!topic/mongodb-user/2LzAkyaNqe

更新1

集計のトランスクリプトはMongoDB2.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
18
Rafa