J'essaie d'optimiser une requête mongodb. J'ai un index sur from_account_id
, to_account_id
, et created_at
. Mais la requête suivante effectue une analyse de collection complète.Mongo utilisant des index avec tri
{
"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"
}
Si je ne fais pas le or
, et seulement la requête from_account_id
ou to_account_id
avec une commande sur, il est rapide.
Quelle est la meilleure façon d'obtenir l'effet désiré? Devrais-je conserver account_ids (à la fois de et à) dans un champ comme un tableau? Ou peut-être y a-t-il un meilleur moyen. Merci!
+1, Les deux balles sont des recommandations solides. –
Super, merci pour l'aide! –
$ ou dans Mongo ne fait pas l'optimiseur ignorer les index. Il ignore les index des instructions $ ou imbriquées: https://jira.mongodb.org/browse/SERVER-3327?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel#issue-tabs – Spencer