find和sort同时使用时,mongodb是如何处理的?
大家讲道理
大家讲道理 2017-05-02 09:20:21
0
1
596

今天在mongodb索引帮助文档里发现下边的描述:
集合order有以下索引:

{ qty: 1 }
{ status: 1, ord_date: -1 }
{ status: 1 }
{ ord_date: -1 }

查询语句:

db.orders.find( { qty: { $gt: 10 } } ).sort( { status: 1 } )

That is, MongoDB does not use the { qty: 1 } index for the query, and the separate { status: 1 } or the { status: 1, ord_date: -1 } index for the sort.

sort不能使用{ status: 1 } 或 { status: 1, ord_date: -1 } 我能理解,但是为什么find不能使用{ qty: 1 } 这个索引呢?

补充:是我理解错了,查询最后使用了{qty:1}这个索引

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(1)
PHPzhong

Tout d'abord, permettez-moi de poser une question : avez-vous essayé quel index est utilisé dans cette requête ?
Parlez-moi encore de ce paragraphe en anglais, je pense que vous avez peut-être mal compris son sens. Cette phrase signifie : le moteur de requête n'utilisera pas {qty:1} pour satisfaire find de et en même temps utilisera {status: 1} ou {status: 1, ord_date: -1} pour satisfaire sort. Permettez-moi de le dire plus clairement : la requête utilise soit {qty: 1} pour satisfaire find (puis utilise le tri en mémoire), soit utilise {status: 1} ou {status: 1, ord_date: -1} pour satisfaire le tri (mais ne peut trouver l'ensemble de résultats que via l'analyse d'ensemble ).
Il n'y a aucun index dans votre index existant qui puisse satisfaire à la fois la requête et le tri. L'index qui peut atteindre cet objectif est : {status: 1, qty: 1}. Mais le problème est que ce n’est pas forcément un bon choix. Peut-être que le tri {qty: 1}+mémoire sera plus efficace. Tout dépend de la distribution de vos données. Le principe spécifique est en fait le même que celui de l'index dans les SGBDR, ou l'index utilisant l'arborescence B/B+ a cette vertu. Si vous ne pouvez pas l’expliquer clairement en quelques mots, recherchons les informations pertinentes.
Le moyen simple consiste à créer tous les index que nous venons de mentionner, puis à exécuter cette requête et à les laisser le déchirer eux-mêmes. En fin de compte, le moteur de requête sélectionnera le meilleur index pour vous en fonction des données échantillonnées.
Alors revenons à la question initiale, avez-vous essayé quel indice choisir ? Étant donné que l'indice qui gagne à la fin est déterminé en fonction de la distribution de vos données, il n'y a pas de réponse définitive ici. Je suis prêt à parier {status: 1, qty: 1} pour gagner.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal