MongoDB, exécution de requête par expression régulière sur les champs indexés
je veux trouver un compte par son nom (dans une collection MongoDB de 50K comptes)
De la manière habituelle: nous trouver avec de la ficelle
db.accounts.find({ name: 'Jon Skeet' }) // indexes help improve performance!
Que Diriez-vous de l'expression régulière? C'est une opération coûteuse?
db.accounts.find( { name: /Jon Skeet/ }) // worry! how indexes work with regex?
Edit:
selon WiredPrairie:
MongoDB use prefix de RegEx à des index de recherche (ex: /^prefix.*/
):
db.accounts.find( { name: /^Jon Skeet/ }) // indexes will help!'
1 réponses
en Fait, selon la documentation,
si un index existe pour le champ, alors MongoDB correspond à la normale expression par rapport aux valeurs de l'indice, qui peuvent être plus rapides que balayage de la collection. D'autres optimisations peuvent se produire si les expression est une "expression préfixe", ce qui signifie que tout le potentiel les matchs commencent avec la même chaîne. Cela permet à MongoDB de construire un "range" à partir de ce préfixe et ne correspondent qu'à ces valeurs de la indice qui se situent dans cette fourchette.
http://docs.mongodb.org/manual/reference/operator/query/regex/#index-use
En d'autres termes:
pour /Jon Skeet / regex, mongo va balayer les clés dans l'index puis va chercher les documents correspondants, ce qui peut être plus rapide que le balayage de la collection.
pour /^Jon Skeet/ regex ,mongo ne scannera que la plage qui commence avec le regex dans l'index, ce qui sera plus rapide.