Я пытаюсь оптимизировать запрос mongodb. У меня есть индекс на from_account_id
, to_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
или to_account_id
с заказом на нее, это быстро.
Каков наилучший способ получить желаемый эффект? Должен ли я хранить account_ids (оба и от) в одном поле, как массив? Или, может быть, есть лучший способ. Благодаря!
+1, Оба пули - солидные рекомендации. –
Отлично, спасибо за помощь! –
$ или в Mongo не делает индексы пропуска оптимизатора. Он пропускает индексы для вложенных $ или операторов: https://jira.mongodb.org/browse/SERVER-3327?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel#issue-tabs – Spencer