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

Regulärer MongoDB-Ausdruck mit indiziertem Feld

Der Grund für den Leistungsunterschied hier ist wahrscheinlich, dass Ihre Abfrage bei aktiviertem Index den Index durchlaufen (in den Speicher laden) und dann die übereinstimmenden Dokumente laden muss, die ebenfalls in den Speicher zurückgegeben werden sollen. Da Sie die Präfixabfrage nicht verwenden, werden alle Werte im Index gescannt und anhand des regulären Ausdrucks getestet. Nicht sehr effizient.

Wenn Sie den Index entfernen, führen Sie nur einen Tabellenscan durch und passen die Regex dort an - im Wesentlichen haben Sie die Dinge gegenüber dem ersten etwas vereinfacht.

Möglicherweise können Sie die indizierte Version schneller erstellen, wenn es sich um einen Covered-Index-Abfrage , wäre es wahrscheinlich auch schneller, wenn dies ein zusammengesetzter Index wäre und Sie ihn mit den Kriterien für ein anderes Feld kombinieren müssten.

Wenn Sie eine Präfixabfrage verwenden, verwendet sie nicht nur einen Index, sondern Sie verwenden den Index effizient, was der Schlüssel ist, und daher sehen Sie die tatsächlichen Leistungsgewinne.