2017-02-07 3 views
2

Ich habe mongodb auf localhost, in der Datenbank habe ich 90 Millionen Datensätze. Wenn ich nach einem Eintrag über db.emails.find({"name":"example"}) suche, dauert es zu lange, um das Ergebnis zu erhalten. Gibt es eine Möglichkeit, die Geschwindigkeit von Mongodb zu erhöhen?Mongodb nimmt zu viel Zeit, um den Rekord zu finden

Antwort

3

erstellen index für name Feld

db.emails.createIndex({ name: 1}) 

Wenn Sie keinen Index für das Feld haben, dann müssen mongodb eine Sammlung Scan durchführen, wenn Abfrage ausgeführt, dh jedes Dokument in der Sammlung scannen Wert von name zu überprüfen Feld, die Ihrer Abfrage entsprechen. Dieser Index für andere Handspeicher hat nur Werte von name, die schnell überprüft werden können.

Es gibt eine Grenze für den Indexschlüssel. Die Gesamtgröße des Indexeintrags muss weniger als 1024 Byte betragen. Aber Sie können Textindex verwenden, wenn Sie Abfragen auf Zeichenfolge Inhalt suchen möchten:

db.emails.createIndex({ name: "text"}) 

Auch wenn Sie für genaue Übereinstimmung suchen möchten, dann können Sie Hash-Index verwenden:

+0

I Index mit derselben Funktion careated, habe diesen Fehler { "ok": 0, "errmsg": "WiredTigerIndex :: einfügen: Schlüssel zu groß, um zu indizieren, fehlgeschlagen 5452 {: \" Bandaancha39escalones.es4everexiliados.creatuforo.com7artpictures.com7peliculas.coma3magazine.comadictasalcibersexo.comaestrada.netagente69.comanimeid. .. \ "}", "code": 17280, "code Name ":" KeyTooLong " } –

+0

Danke @Sergey. –

+0

Es ist sehr schnell für die normale Suche, aber wenn ich wie Abfrage ausführen, dauert es viel Zeit. Jeder Vorschlag zur Verbesserung der Geschwindigkeit der gleichen Abfrage. Abfrage Beispiel: db.web_tech.find ({url: /.* sa. * /}). Count() –

0

Regel Speedup mongodb-Abfragen, was man tun kann, ist einen zusammengesetzten Index vorzubereiten.

In Ihrem Fall, da es sich um E-Mail-Adressen handelt, würde ich Ihnen vorschlagen, die E-Mail als ID zu setzen und die Suche mit regulären Ausdrücken durchzuführen, bei denen Groß- und Kleinschreibung nicht berücksichtigt wird. Zum Beispiel, wenn Sie wollen, dass jeder, der Google Mail-Konten hat, können Sie eine Suche wie

db.users.find({_id:/@gmail.com/})

Ich glaube, führen dies Ihr Code viel Speedup würde