2011-10-22 3 views
2

Disons que j'ai de nombreux documents similaires à ce ...Comment indexer "ou" dans MongoDB?

{ 
    name: 'alex', 
    city: 'LA', 
    about: 'designer', 
} 

db.people.find({'name':'alex', $or: [{'city':'LA'}, {'about':'designer'}] }); 

Si je veux interroger, comment puis-je indexer? Ai-je besoin de 2 index chaque fois que j'ai un "ou"?

Répondre

3

Le premier mot de l'indexation est toujours le official Mongo index documentation.

Pour répondre plus directement à cette question, si vous voulez que la requête utilise l'indexation sur plus de "nom", vous avez besoin d'un index pour les trois champs. Même si cela peut être fait via trois indices séparés, une paire d'indices composés pourrait donner de meilleurs résultats:

db.people.ensureIndex({name:1, city:1}); 
db.people.ensureIndex({name:1, about:1}); 

Avant de s'installer sur une option, cependant, j'utiliserais, Mongo de explain method pour déterminer quels gains chaque indice est vous donnant une requête sans index (test sur un ensemble de données aussi grand que votre production attendue). Je porterais une attention particulière aux propriétés "nscanned" et "nscannedObjects" avec chaque combinaison d'index, ainsi que de vérifier que l'index désiré est utilisé en utilisant "indexOnly" et "isMultiKey". En guise de conclusion, la sur-indexation peut aussi poser des problèmes de performance. Si ce n'était pas le cas, nous n'aurions pas besoin d'assurer les index. Assurez-vous que vous avez besoin des gains de vitesse de lecture des index plus que les pertes de vitesse d'écriture de ces index.