MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Quelle est la bonne façon d'indexer dans MongoDB lorsqu'il existe une grande combinaison de champs

Généralement, les index ne sont utiles que s'ils sont sur une sélective domaine. Cela signifie que le nombre de documents qui ont une valeur particulière est petit par rapport au nombre total de documents.

Ce que "petit" signifie varie selon l'ensemble de données et la requête. Une sélectivité de 1 % est assez sûre pour décider si un indice a du sens. Si une valeur particulière existe dans, disons, 10 % des documents, effectuer une analyse de table peut être plus efficace que d'utiliser un index sur le champ respectif.

Dans cet esprit, certains de vos champs seront sélectifs et certains ne le seront pas. Par exemple, je soupçonne que le filtrage par "OK" ne sera pas très sélectif. Vous pouvez éliminer les champs non sélectifs des considérations d'indexation - si quelqu'un veut que toutes les commandes soient "OK" sans autres conditions, il finira par faire une analyse de table. Si quelqu'un veut des commandes qui sont "OK" et qui ont d'autres conditions, tout index applicable à d'autres conditions sera utilisé.

Maintenant que vous vous retrouvez avec des champs sélectifs (ou du moins quelque peu sélectifs), considérez quelles requêtes sont à la fois populaires et sélectives. Par exemple, peut-être que marque+type serait une telle combinaison. Vous pouvez ajouter des index composés qui correspondent aux requêtes populaires que vous pensez être sélectives.

Maintenant, que se passe-t-il si quelqu'un filtre uniquement par marque ? Cela peut être sélectif ou non selon les données. Si vous avez déjà un index composé sur marque+type, vous laisserez à la base de données le soin de déterminer s'il est plus efficace de répondre à une requête de marque uniquement via l'index marque+type ou via une analyse de collection.

Continuez de cette manière avec d'autres requêtes et champs populaires.