Mongo 2.4.4に_match-unwind-group-sort
_集約パイプラインがあり、集約を高速化する必要があります。
一致操作は、16フィールドの範囲クエリで構成されます。 .explain()
メソッドを使用して範囲クエリを最適化しました(つまり、複合インデックスを作成します)。集計を最適化するための同様の機能はありますか?私は次のようなものを探しています:
_db.col.aggregate([]).explain()
_
また、インデックスの最適化に集中する権利はありますか?
最初の質問については、はい、集計について説明できます。
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