Skip to content
← Zurück zum Blog

50.000 E-Mails in Millisekunden durchsuchen: So funktioniert der lokale Index von MailVault

7 Min. Lesezeit

Tippe ein Wort in MailVault, und die neuesten Treffer stehen auf dem Bildschirm, noch bevor du den Tastendruck beendet hast. Um zu prüfen, dass das auch bei einem wirklich großen Postfach gilt, haben wir einen Vault mit 50.000 Nachrichten gebaut und die Suche gemessen. Die langsamste Abfrage, die wir ausgeführt haben, dauerte 14 Millisekunden.

Dieser Beitrag nennt die tatsächlichen Zahlen, was gemessen wurde und was nicht, und die Technik dahinter: eine kleine, schlichte SQL-Datenbank, die in deinem Vault liegt.

Der Test

Wir haben 50.000 Nachrichten von jeweils etwa 3.3 KB erzeugt, in der Form aus HTML und Nur-Text (multipart), die echte Mail hat. Sie verteilen sich auf drei Ordner (Posteingang, Archiv und Gesendet, je etwa ein Drittel), mit bekannten Wörtern in bekannten Anteilen: „invoice“ in 5 % der Nachrichten, „budget“ in 8 %, „meeting“ in 6 %, dazu japanische und akzentuierte Wörter, um die nicht-englische Suche zu prüfen. Jede Nachricht lief durch den echten MIME-Parser und den echten Index-Code von MailVault, in einem Release-Build.

Die Maschine war ein Apple M4 Mac mini mit 16 GB Speicher. Sie war nicht im Leerlauf: Während der Tests liefen darauf andere Builds, nimm die Zeiten also als das, was du auf einem ausgelasteten Computer bekommst. Jede Abfrage lief sechsmal, dreimal auf einem Scratch-Build der Korrektur und dreimal auf dem gemergten Code. Die Werte unten sind der Bereich über diese Läufe, und jede Zeit umfasst die Suche plus den Aufbau der Ergebniszeilen, die du in der Liste siehst.

Die Ergebnisse

50,000 messages · Apple M4 · warm cache · 6 runs each

query                    matches   rows shown   time
invoice                  ~2,500    500          7.1 – 7.5 ms
budget meeting           246       246          13.4 – 14.1 ms
update 4999              15        15           13.5 – 14.0 ms
会議 (Japanese)         1,529     500          4.3 – 4.6 ms
last 7 days, no words    1,008     500          1.0 ms

first index build        11 s      (10.9 – 11.9 s)
index size on disk       225 MB
status check             5 ms

Zwei Dinge lassen sich aus dieser Tabelle ablesen. Erstens hängt die Zeit nicht von der Zahl der Treffer ab: 15 Treffer brauchten länger als 2.500, denn Zeit kostet die Form der Abfrage (eine Phrase aus zwei Wörtern ist mehr Arbeit als ein einzelnes Wort), nicht die Menge der zurückgegebenen Mail. Zweitens zeigt die Liste höchstens die neuesten 500 Treffer und sagt das, wenn es mehr gibt, sodass das Anzeigen der Ergebnisse begrenzte Arbeit ist, egal wie viele Nachrichten passen.

MailVault-Suchergebnisse für das Wort invoice in einem Tresor mit 50.000 Nachrichten. Unter dem Suchfeld steht, dass die Liste die neuesten 500 von etwa 2.500 gespeicherten Treffern in allen Ordnern zeigt, darunter eine Liste von Nachrichtenzeilen.
Dieselbe Art von Suche in der App: „invoice“ über einen Tresor mit 50.000 Nachrichten. Die Liste zeigt die neuesten 500 von etwa 2.500 gespeicherten Treffern und sagt das auch. Die wenigen Zeilen ganz oben stammen aus den Demo-Postfächern, die sich dieses Fenster teilen, und die Tresorordner heißen Projects, Correspondence und Clients statt wie im Benchmark.
Search time per query on 50,000 messages, in milliseconds Five bars: last 7 days with no words 1.0 ms, Japanese query 4.5 ms, invoice 7.4 ms, budget meeting 14.0 ms, update 4999 14.0 ms. Every bar ends before the 16.7 ms mark, which is one screen refresh at 60 Hz. 0 5 10 15 20 milliseconds, search plus building the result rows last 7 days, no words 1 ms 会議 (Japanese) 4.5 ms invoice 7.4 ms budget meeting 14 ms update 4999 14 ms one 60 Hz screen refresh: 16.7 ms
Suchzeit pro Abfrage bei 50.000 Nachrichten. Jeder Balken endet vor dem nächsten Bildschirm-Refresh bei 60 Hz.

Der einmalige Aufwand ist der Aufbau des Index: etwa elf Sekunden für 50.000 Nachrichten, ungefähr 4.000 Nachrichten pro Sekunde, und 225 MB Speicherplatz. Er läuft im Hintergrund, du kannst MailVault währenddessen weiter nutzen, und danach werden nur neue und geänderte Nachrichten indexiert.

MailVault, Einstellungen, Tab Speicher, Karte Suchindex mit der Anzeige 50.000 / 50.000 indexiert und etwa 270 MB, dazu Schalter für Nachrichtentext, Anhangstext und Text in Bildern.
Einstellungen, Speicher, Suchindex nach Abschluss des Aufbaus: 50.000 von 50.000 Nachrichten indexiert, etwa 270 MB auf der Festplatte. Das ist ein eigener Lauf in der App, deshalb weicht die Größe von den 225 MB in der Benchmark-Tabelle oben ab.

Wie sich 1 ms und 7 ms anfühlen

Millisekunden sind schwer vorstellbar, deshalb hier ein Lineal. Ein 60-Hz-Display zeichnet alle 16.7 ms neu, und selbst die langsamste Suche hier war innerhalb eines einzigen Neuzeichnens fertig. Die Usability-Forschung nutzt seit 1993 dieselben drei Grenzen: Unter 0.1 Sekunden fühlt sich sofort an, bis 1 Sekunde bleibt dein Gedankengang ungestört, und nach 10 Sekunden ist deine Aufmerksamkeit weg. Vierzehn Millisekunden sind etwa ein Siebtel der Grenze für „sofort“. Der Datumsfilter liegt mit 1 ms hundertmal darunter.

How long is a millisecond? Search times on a logarithmic time scale A logarithmic ruler from 1 millisecond to 100 seconds. MailVault search sits between 1 and 14 milliseconds, close to one screen refresh at 16.7 milliseconds and far below the 100 millisecond point at which a response feels instant. The old file-by-file search projected to 88 seconds on a 20,000-message folder. 1 ms 10 ms 100 ms 1 s 10 s 100 s MailVault search on 50,000 messages: 1 to 14 ms one screen refresh 16.7 ms at 60 Hz feels instant under 100 ms flow of thought up to 1 s attention lost after 10 s old search 88 s (projected)
Zeit auf einer logarithmischen Skala, von 1 Millisekunde bis 100 Sekunden. Jeder Teilstrich ist das Zehnfache des vorherigen. Grenzwerte für Antwortzeiten: Jakob Nielsen. Der Punkt bei 88 s ist die Hochrechnung der ursprünglichen dateiweisen Suche auf einen Ordner mit 20.000 Nachrichten.

Servermail, Archiv und Backup: eine Suche

MailVault-Suchergebnisse zu einer Abfrage, mit der Legende unten, die die Markierungen „nur auf dem Server“, „in deinem Vault“, „einzige Kopie“ und „auf Backup-Laufwerk“ erklärt
Jedes Ergebnis zeigt, wo die Nachricht liegt: nur auf dem Server, in deinem Vault, die einzige Kopie oder auf deinem Backup-Laufwerk.

MailVault hält drei Arten von Mail nebeneinander: vom Server synchronisierte Nachrichten, von dir archivierte Nachrichten und aus einem Backup wiederhergestellte Nachrichten. Sie alle landen als Dateien im selben Vault und gehen deshalb in denselben Index. Im Test lag die Mail in einem Posteingang, einem Archiv und einem Gesendet-Ordner, und eine Abfrage deckte alles ab. Woher eine Nachricht stammt, ändert nichts daran, wie schnell sie gefunden wird.

Mail, die nur auf dem Server liegt und nie heruntergeladen wurde, ist nicht im Vault, daher kann der lokale Index nichts davon wissen. Dafür fragt MailVault zusätzlich den Server, und indexierte lokale Ergebnisse erscheinen zuerst, während der Server antwortet. Dieser Teil hängt von deinem Anbieter ab, deshalb nennen wir dafür keine Zahl. Mit Premium kannst du bis zu fünf Server-Postfächer gleichzeitig durchsuchen statt eines.

Das externe Backup-Laufwerk ist eine zweite, kalte Kopie. Die Suche läuft auf deinem Arbeits-Vault, und Ergebnisse werden markiert, wenn eine Kopie auch auf dem Backup-Laufwerk existiert.

Die Technik: eine sehr schnelle, sehr einfache SQL-Datenbank

Es gibt keinen Suchserver und keinen Cloud-Dienst. Der Index ist eine einzige SQLite-Datei in deinem Vault, und SQLite ist wahrscheinlich die am weitesten verbreitete Datenbank der Welt. MailVault nutzt deren Volltextsuchmaschine FTS5 mit einem Trigram-Tokenizer: Jedes Wort wird als überlappende Drei-Buchstaben-Stücke gespeichert. Deshalb kannst du „voic“ eintippen und „invoice“ finden, ohne Platzhalter und ohne Ganzwort-Regeln. Akzente werden vereinheitlicht, sodass „reunion“ auch „Réunion“ findet. Japanisch und Chinesisch, die keine Leerzeichen zwischen Wörtern verwenden, laufen über eine zweite, dafür gebaute Tabelle.

Die Geschwindigkeit kommt aus drei schlichten Entscheidungen:

  • Die Suche öffnet nie eine Nachrichtendatei. Alles, was die Liste braucht (Absender, Betreff, Datum, Ordner, Flags), steht in der Zeile des Index. Beim Test mit 50.000 Nachrichten wurde der Mail-Parser null Mal aufgerufen, während die Ergebnisse aufgebaut wurden.
  • Eine Datei, ein Prozess. Der Index gehört dem Hintergrundhelfer von MailVault, wird einmal geöffnet und bleibt warm. Es gibt nichts zu starten und nichts, das über ein Netzwerk gesendet werden müsste.
  • Deine Festplatte bleibt die maßgebliche Quelle. Der Index besteht aus abgeleiteten Daten. Wird er einmal beschädigt, baut MailVault ihn aus deinen gespeicherten Nachrichten neu auf und rührt die Nachrichten selbst nie an.

Sie funktioniert offline, und nichts verlässt deinen Computer.

Anhänge und Bilder (Premium)

Die kostenlose Suche umfasst Absender, Betreffs und Nachrichtentexte. Premium ergänzt den Text in Anhängen, im selben Index und im selben Suchfeld:

  • Text in Anhängen. PDF-, Word-, Excel- und PowerPoint-Dateien werden gelesen und ihr Text wird indexiert, sodass eine Suche nach einer Vertragsnummer die Nachricht findet, deren PDF sie enthält.
  • Text in Bildern und Scans unter macOS. MailVault nutzt das Vision-Framework von Apple auf deinem Mac, um Text in Fotos, Screenshots und gescannten Seiten zu erkennen, und indexiert ihn dann. Die Erkennung läuft auf dem Gerät. Unter Windows und Linux gibt es diesen Schritt nicht.

Ein Suchtreffer, der nur in einem Anhang existiert, wird mit einer Büroklammer markiert, damit du weißt, warum eine E-Mail mit unauffälligem Text aufgetaucht ist. Die Extraktion von Anhängen haben wir in diesem Test nicht gemessen: Sie hängt von deinen Dateien ab und läuft einmal pro Anhang im Hintergrund, nicht zur Suchzeit.

Wie andere Mail-Programme ihre Suche beschreiben

Wir haben andere Mail-Apps nicht gemessen, und keine der folgenden veröffentlicht Suchzeiten bei 50.000 Nachrichten, daher ist das ein Vergleich der Konzepte, nicht der Stoppuhren:

  • Apple Mail: Apple gibt an, dass die erste Indexierung von Spotlight je nach Datenmenge Stunden oder sogar Tage dauern kann und dass Mail einen Hinweis anzeigen kann, dass die Indexierung noch nicht abgeschlossen ist.
  • Outlook für Windows nutzt den Windows-Search-Index, und Microsoft weist darauf hin, dass Ergebnisse unvollständig sein können, bis die Indexierung abgeschlossen ist, dass nur lokal zwischengespeicherte Mail indexiert wird und dass ältere Elemente ausgeblendet werden können, wenn eine Suche zu viele Treffer liefert.
  • Thunderbird führt einen globalen Index in seiner eigenen Datenbank. Im Bugtracker gibt es seit Langem offene Meldungen über eine Indexierung, die bei großen Postfächern langsamer wird, darunter ein Nutzer, der für 36.000 Nachrichten mehrere Tage angab. Das sind Nutzerberichte auf älterer Hardware und mit unserem Test nicht direkt vergleichbar.

Unsere Designentscheidung ist die Umkehrung der üblichen: Wir indexieren deine eigene gespeicherte Kopie, halten sie in einer kleinen Datei und halten den Abfragepfad so kurz, dass die Antwort in Millisekunden gemessen wird.

Was dieser Test nicht zeigt

Das Postfach ist synthetisch. Echte Mail hat größere und unordentlichere Nachrichten, daher wird der Index bei dir größer sein, wenn deine Texte lang sind, auch wenn eine Abfrage weiterhin den Index durchläuft und nicht deine Dateien. Die Zeiten gelten bei warmem Cache: Die erste Suche nach einem Neustart liest mehr von der Festplatte. Der Test umfasst Betreffs, Absender und Nachrichtentexte, nicht den Text von Anhängen, und er lief auf einer einzigen Maschine.

Du kannst die Messung selbst wiederholen: Der Benchmark ist der ignorierte Rust-Test search_index_bench_50k_real_parser im Quellcode von MailVault, und er gibt jede oben genannte Zahl aus.

Finde die E-Mail von vor sechs Jahren in Millisekunden.

MailVault führt neben deinem Archiv einen privaten Suchindex, sodass 50.000 Nachrichten so leicht zu durchsuchen sind wie 500. Kostenlos nutzbar. Die Suche in Anhängen und Bildern gibt es mit Premium.

Quellen: Apple Support, Spotlight-Indexierung; Microsoft Support, Probleme bei der Outlook-Suche; Mozilla Bugzilla 585429. Benchmark gemessen am 21. September 2026.