2013-06-11 5 views
0

Je suis nouveau sur MongoDB. J'ai écrit une requête JS que je cours dans le shell mongo.Requête mongoDB extrêmement lente

Fondamentalement, j'ai deux tables. Les deux ont près de 160 000 enregistrements.

Je passe en revue la première table et pour chaque enregistrement, je passe à la deuxième table pour trouver si l'enregistrement correspondant existe. La requête est en cours d'exécution extrêmement lente (environ 4-5 minutes pour tous les 1000 enregistrements). Que puis-je faire pour le faire fonctionner plus vite? La clé "poss_idx" a un index dans la base de données.

+2

Vous pourriez provoquer (l'équivalence de) une analyse. Si vous ne vous souciez que de l'existence, vous pouvez consulter http://stackoverflow.com/questions/8389811/how-to-query-mongodb-to-test-if-an-item-exists. Ils semblent suggérer que Count est une opération plutôt lente. – Mitch

+2

Si c'est "seulement" 160 000 enregistrements, vous pouvez simplement retirer tous les identificateurs 'poss_idx' à la fois (il suffit de saisir les ID), puis les comparer localement en mémoire. – WiredPrairie

Répondre

1

Je crois qu'il y a un problème avec l'index. J'ai deux tables similaires: 200 000 enregistrements et environ 500 000. Une demande similaire est effectuée pendant environ 40 secondes avec un index et un temps très long sans index.

exécuter la requête:

db.poss_opt.find({poss_idx: "some_id"}).explain() 

Si la requête ci-dessus ne peut pas utiliser un index, vous verrez:

{ 
    "cursor": "BasicCursor", 
    "nscannedObjects": 532543, 
    "nscanned": 532543, 
    "millis": 712, 
    "indexBounds": {}, 
} 

Sinon:

{ 
    "cursor": "BtreeCursor poss_idx_1", 
    "nscannedObjects": 0, 
    "nscanned": 0, 
    "millis": 0, 
    "indexBounds": {"poss_idx": [["some_id", "some_id"]]}, 
} 

Pour afficher des informations d'index la collection, utilisez db.poss_opt.stats() et db.poss_opt.getIndexes()

Si le problème est avec l'index, essayez de laisser tomber et de créer une nouvelle:

db.poss_opt.dropIndex({poss_idx: 1}) 
db.poss_opt.ensureIndex({poss_idx: 1}) 

Si vous avez des questions, s'il vous plaît ne hésitez pas à demander.

+0

Le problème est avec l'index. Mais le laisser tomber et le recréer n'a pas résolu le problème. – mihsathe

+0

@mihsathe, pouvez-vous fournir la version mongodb, les exemples de documents et le résultat stats() pour poss_pbp & poss_opt? – Jarandinor

Questions connexes