我正在尝试优化mongodb查询。我有from_account_id
,to_account_id
和created_at
的索引。但是以下查询执行完整的集合扫描。
{
"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
或to_account_id
并附上订单,那就快了。
获得理想效果的最佳方法是什么?我应该像一个数组一样在一个字段中保留account_ids(来自和来自)或许还有更好的方法。谢谢!
答案 0 :(得分:7)
不幸的是,正如您所发现的,$或子句可能会使优化器生活困难。
所以,要解决这个问题,你有两个选择。其中: