2
私はmongodbクエリを最適化しようとしています。私はfrom_account_id
、、およびcreated_at
のインデックスを持っています。しかし、次のクエリはフルコレクションスキャンを行います。Mongoはソート付きインデックスを使用しています
{
"ts": {
"$date": "2012-03-18T20:29:27.038Z"
},
"op": "query",
"ns": "heroku_app2281692.transactions",
"query": {
"$query": {
"$or": [
{
"from_account_id": {
"$oid": "4f55968921fcaf0001000005"
}
},
{
"to_account_id": {
"$oid": "4f55968921fcaf0001000005"
}
}
]
},
"$orderby": {
"created_at": -1
}
},
"ntoreturn": 25,
"nscanned": 2643718,
"responseLength": 20,
"millis": 10499,
"client": "10.64.141.77",
"user": "heroku_app2281692"
}
私はその上に順にor
、そして唯一のクエリfrom_account_id
またはをしない場合、それは高速です。
希望する効果を得るにはどうすればよいですか? 1つのフィールドに配列のようにaccount_id(fromとtoの両方)を保持する必要がありますか?あるいはもっと良い方法があるかもしれません。ありがとう!あなたが発見したとして
+1、どちらの弾丸は固体勧告しています。 –
よろしくお願いします。 –
$またはMongoでは、オプティマイザはインデックスをスキップしません。入れ子の$またはステートメントのインデックスをスキップします。 https://jira.mongodb.org/browse/SERVER-3327?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel#issue-tabs – Spencer