MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Die einfache Präfixabfrage von Mongodb mit Regex und Sortierung ist langsam

Der scanAndOrder: true in der EXPLAIN-Ausgabe gibt an, dass die Abfrage die Dokumente abrufen und dann im Speicher sortieren muss, bevor die Ausgabe zurückgegeben wird. Dies ist ein kostspieliger Vorgang und wirkt sich auf die Leistung Ihrer Abfrage aus.

Die Existenz von scanAndOrder: true sowie der Unterschied in nscanned ein n in der EXPLAIN-Ausgabe zeigt an, dass die Abfrage keinen optimalen Index verwendet. In diesem Fall scheint es erforderlich zu sein, einen Sammlungsscan durchzuführen. Möglicherweise können Sie dieses Problem beheben, indem Sie die Indexschlüssel in Ihre sort aufnehmen Kriterien. Aus meinen Tests:

db.posts.find({hashtags: /^noticias/ }).limit(15).sort({hashtags:1, rank : -1}).explain()

Erfordert keinen Scan und keine Bestellung und gibt n zurück und nscanned der Anzahl der Datensätze, nach denen Sie suchen. Dies würde auch eine Sortierung nach den hashtags bedeuten Schlüssel, der für Sie nützlich sein kann oder auch nicht, aber die Leistung der Abfrage erhöhen sollte.