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

Comment MongoDB choisit les plans candidats

Si une requête peut être satisfaite par plusieurs index définis dans la collection, MongoDB testera tous les index applicables en parallèle. Le premier index pouvant renvoyer 101 résultats sera sélectionné par le planificateur de requêtes. Il existe d'autres facettes de la sélection d'index, mais en général, cela est vrai selon le Optimisation des requêtes documents.

Ce procédé de sélection d'index peut sélectionner un index sous-optimal. En effet, du point de vue de MongoDB, vous avez plusieurs index qui décrivent la même chose. Pour atténuer la sélection d'index sous-optimale que vous avez observée, vous pouvez :

  1. Supprimez tous les autres index que vous découvrez comme étant sous-optimaux.

    Cela permet de s'assurer que le planificateur de requêtes n'a pas d'autre choix que de choisir les index que vous avez adaptés à votre requête.

  2. Utilisez le hint() méthode

    hint() vous permet de dire explicitement à MongoDB d'utiliser l'index prescrit pour la requête. Par exemple :

    db.tasks.find(...).hint({project: 1, created_by: 1})
    

    Veuillez consulter https://docs.mongodb.com/v2. 6/reference/operator/meta/hint/ pour plus d'informations sur hint() .

Une autre nuance dans votre requête est qu'elle inclut un $or opérateur. Dans ce cas, chaque terme du $or l'expression doit avoir un index associé , sinon MongoDB effectuera un scan de collection (BasicCursor en termes MongoDB 2.6). Ceci est expliqué plus en détail sur https://docs .mongodb.com/v2.6/reference/operator/query/or/#behaviors