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
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:
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
- 1. 502 Gitlab nimmt zu viel Zeit, um zu antworten
- 2. JRebel nimmt zu viel Zeit in Anspruch, um zu aktualisieren
- 3. MySQL-Abfrage nimmt zu viel Zeit
- 4. React-native Transformator nimmt zu viel Zeit
- 5. XSSFWorkbook nimmt viel Zeit
- 6. Tomcat nimmt zu viel Zeit in Anspruch
- 7. StanfordNLP CRFClassifier nimmt zu viel Zeit
- 8. GraphAlgoFactory.allSimplePaths nimmt viel Zeit
- 9. Abfrage zu viel Zeit
- 10. .NET Regex nimmt lange Zeit, um das Spiel zu finden
- 11. „Ember dienen“ Befehlsausführung nimmt zu viel Zeit auf Win7
- 12. TextToSpeech nimmt zu viel Zeit, während synthesizeToFile in Android
- 13. LibWebP nimmt zu viel Zeit für die Bildkompression
- 14. Wie viel Zeit braucht man, um den Trie zu bauen
- 15. Android: Firebase braucht zu viel Zeit, um Daten zu holen
- 16. npm installieren auf raspbian nimmt viel Zeit
- 17. Android-Anwendung braucht zu viel Zeit, um zu starten?
- 18. Pocksphinx nimmt zu viel Batterie auf Android
- 19. Simulieren in omnet ++ dauert zu viel Zeit
- 20. analogRead braucht zu viel Zeit
- 21. SQL Query nimmt viel zu lange
- 22. CygWin tmp Ordner nimmt zu viel Speicherplatz
- 23. Xcode 7.3 nimmt zu viel Platz
- 24. Orakel löschen Abfrage zu viel Zeit
- 25. Webpack bauen zu viel Zeit
- 26. Rack :: Lock # Anruf zu viel Zeit
- 27. Diese Abfrage benötigt viel Zeit, um sie zu optimieren.
- 28. Schluck Flusen dauert zu viel Zeit
- 29. Application Insights nimmt Zeit, um Ereignis zu senden
- 30. Abfrage benötigt viel Zeit, um einen einzelnen Zeilenbefehl zu verarbeiten.
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 " } –
Danke @Sergey. –
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() –