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
或與它的順序,速度非常快。
獲得理想效果的最佳方法是什麼?我應該保持account_ids(來自和來自)像一個數組一樣的領域?或者也許有更好的方法。謝謝!
+1,這兩個項目符合可靠的建議。 – 2012-03-19 00:58:28
非常感謝您的幫助! – 2012-03-19 07:05:43
$或在Mongo中不會使優化器跳過索引。它會跳過嵌套$或語句的索引: https://jira.mongodb.org/browse/SERVER-3327?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel#issue-tabs – Spencer 2012-03-19 13:52:23