Cercare tra 50.000 email in millisecondi: come funziona l’indice locale di MailVault
Scrivi una parola in MailVault e le corrispondenze più recenti sono già sullo schermo prima che tu finisca di premere il tasto. Per verificare che valga anche con una casella davvero enorme, abbiamo costruito un vault da 50.000 messaggi e misurato la ricerca. La query più lenta che abbiamo provato ha impiegato 14 millisecondi.
Questo articolo riporta i numeri reali, che cosa è stato misurato e che cosa no, e la tecnologia che sta dietro: un piccolo e semplice database SQL che vive dentro il tuo vault.
Il test
Abbiamo generato 50.000 messaggi di circa 3,3 KB ciascuno, nella forma multipart HTML più testo semplice tipica della posta reale. Sono distribuiti in tre cartelle (Inbox, Archive e Sent, circa un terzo ciascuna) con parole note inserite a frequenze note: «invoice» nel 5% dei messaggi, «budget» nell’8%, «meeting» nel 6%, più parole giapponesi e con accenti per mettere alla prova la ricerca non inglese. Ogni messaggio è passato dal vero parser MIME e dal vero codice di indicizzazione di MailVault, in una build di release.
La macchina era un Mac mini Apple M4 con 16 GB di memoria. Non era inattiva: durante i test erano in corso altre build, quindi considera i tempi come quelli che ottieni su un computer occupato. Ogni query è stata eseguita sei volte, tre su una build di prova della correzione e tre sul codice integrato. I valori qui sotto sono l’intervallo di quelle esecuzioni, e ogni tempo comprende la ricerca più la costruzione delle righe dei risultati che vedi nell’elenco.
I risultati
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
Dalla tabella vale la pena ricavare due cose. Primo, il tempo non dipende dal numero di corrispondenze: 15 risultati hanno richiesto più di 2.500, perché a costare tempo è la forma della query (una frase di due parole richiede più lavoro di una parola singola), non la quantità di posta che torna indietro. Secondo, l’elenco mostra al massimo le 500 corrispondenze più recenti e lo dice quando ce ne sono di più, quindi disegnare i risultati è un lavoro limitato, qualunque sia il numero di messaggi trovati.

Il costo una tantum è la costruzione dell’indice: circa undici secondi per 50.000 messaggi, circa 4.000 messaggi al secondo, e 225 MB di disco. Avviene in background, puoi continuare a usare MailVault mentre procede, e dopo vengono indicizzati solo i messaggi nuovi e modificati.

Come si sentono 1 ms e 7 ms
I millisecondi sono difficili da immaginare, quindi ecco un righello. Un display a 60 Hz ridisegna lo schermo ogni 16,7 ms, e perfino la ricerca più lenta qui ha finito entro un singolo ridisegno. La ricerca sull’usabilità usa gli stessi tre limiti dal 1993: sotto 0,1 secondi sembra istantaneo, fino a 1 secondo il filo dei pensieri resta intatto, e a 10 secondi l’attenzione è sparita. Quattordici millisecondi sono circa un settimo del limite dell’«istantaneo». Il filtro per data, con 1 ms, è cento volte sotto.
Posta del server, archivio e backup: un’unica ricerca

MailVault tiene affiancati tre tipi di posta: i messaggi sincronizzati dal tuo server, quelli che hai archiviato e quelli ripristinati da un backup. Finiscono tutti come file nello stesso vault, quindi finiscono tutti nello stesso indice. Nel test la posta stava in una cartella Inbox, una Archive e una Sent, e una sola query le ha coperte tutte. Da dove arriva un messaggio non cambia la velocità con cui viene trovato.
La posta che si trova solo sul server e non è mai stata scaricata non è nel vault, quindi l’indice locale non può conoscerla. Per questo MailVault interroga anche il server, e i risultati locali indicizzati compaiono per primi mentre il server risponde. Quel tratto dipende dal tuo provider, quindi non pubblichiamo alcun numero. Premium può cercare fino a cinque caselle server contemporaneamente invece di una.
Il disco di backup esterno è una seconda copia, fredda. La ricerca gira sul tuo vault di lavoro, e i risultati sono contrassegnati quando esiste una copia anche sul disco di backup.
La tecnologia: un database SQL molto veloce e molto semplice
Non c’è alcun server di ricerca e nessun servizio cloud. L’indice è un unico file SQLite dentro il tuo vault, e SQLite è probabilmente il database più diffuso al mondo. MailVault usa il suo motore di ricerca full-text, FTS5, con un tokenizzatore trigram: ogni parola viene memorizzata come pezzetti sovrapposti di tre lettere. Ecco perché puoi digitare «voic» e trovare «invoice», senza caratteri jolly e senza regole sulla parola esatta. Gli accenti vengono ignorati, quindi «reunion» trova «Réunion». Giapponese e cinese, che non usano spazi tra le parole, passano per una seconda tabella pensata apposta.
La velocità nasce da tre scelte semplici:
- La ricerca non apre mai un file di messaggio. Tutto ciò che serve all’elenco (mittente, oggetto, data, cartella, flag) è memorizzato nella riga dell’indice. Durante il test con 50.000 messaggi il parser della posta non è stato chiamato nemmeno una volta mentre venivano costruiti i risultati.
- Un file, un processo. L’indice appartiene all’helper in background di MailVault, viene aperto una sola volta e tenuto pronto. Non c’è niente da avviare e niente da inviare su una rete.
- Il tuo disco resta la fonte di verità. L’indice è un dato derivato. Se dovesse mai danneggiarsi, MailVault lo ricostruisce dai messaggi che hai salvato e non tocca mai i messaggi stessi.
Funziona offline e niente lascia il tuo computer.
Allegati e immagini (Premium)
La ricerca gratuita copre mittenti, oggetti e corpo dei messaggi. Premium aggiunge il testo dentro gli allegati, nello stesso indice e nella stessa casella di ricerca:
- Testo degli allegati. I file PDF, Word, Excel e PowerPoint vengono letti e il loro testo viene indicizzato, così cercando un numero di contratto trovi il messaggio il cui PDF lo contiene.
- Testo di immagini e scansioni su macOS. MailVault usa il framework Vision di Apple sul tuo Mac per riconoscere il testo in foto, schermate e pagine scansionate, poi lo indicizza. Il riconoscimento avviene sul dispositivo. Windows e Linux non hanno questo passaggio.
Un risultato che esiste solo dentro un allegato è contrassegnato da una graffetta, così capisci perché è comparsa un’email con un corpo poco significativo. In questo test non abbiamo cronometrato l’estrazione dagli allegati: dipende dai tuoi file e viene eseguita una volta per allegato in background, non al momento della ricerca.
Come gli altri client descrivono la propria ricerca
Non abbiamo misurato altre app di posta, e nessuna di quelle qui sotto pubblica tempi di ricerca a 50.000 messaggi, quindi questo è un confronto tra progetti, non tra cronometri:
- Apple Mail: Apple afferma che la prima indicizzazione di Spotlight può richiedere ore o addirittura giorni, a seconda della quantità di dati, e che Mail può mostrare un avviso che l’indicizzazione non è ancora completa.
- Outlook per Windows usa l’indice di Windows Search, e Microsoft segnala che i risultati possono essere incompleti finché l’indicizzazione non termina, che viene indicizzata solo la posta in cache locale e che gli elementi più vecchi possono essere nascosti quando una ricerca restituisce troppi risultati.
- Thunderbird mantiene un indice globale nel proprio database. Il suo bug tracker contiene segnalazioni di lunga data di indicizzazione che rallenta sulle caselle di grandi dimensioni, compreso un utente che ha riferito diversi giorni per 36.000 messaggi. Sono segnalazioni di utenti su hardware datato e non sono direttamente confrontabili con il nostro test.
La nostra scelta progettuale è l’opposto di quella abituale: indicizziamo la tua copia salvata, la teniamo in un unico piccolo file, e manteniamo il percorso della query abbastanza breve da misurare la risposta in millisecondi.
Che cosa questo test non mostra
La casella è sintetica. La posta reale ha messaggi più grandi e più disordinati, quindi l’indice sarà più grande per te se i tuoi corpi sono lunghi, anche se una query percorre comunque l’indice e non i tuoi file. I tempi sono a cache calda: la prima ricerca dopo un riavvio legge di più dal disco. Il test copre oggetti, mittenti e corpi, non il testo degli allegati, ed è stato eseguito su una sola macchina.
Puoi ripetere la misurazione da solo: il benchmark è il test Rust ignorato search_index_bench_50k_real_parser nel codice sorgente di MailVault, e stampa tutti i numeri qui sopra.
Trova in millisecondi l’email di sei anni fa.
MailVault tiene un indice di ricerca privato accanto al tuo archivio, così cercare tra 50.000 messaggi è facile come cercare tra 500. Uso gratuito. La ricerca negli allegati e nelle immagini è inclusa in Premium.
Fonti: Apple Support, indicizzazione di Spotlight; Microsoft Support, problemi di ricerca in Outlook; Mozilla Bugzilla 585429. Benchmark misurato il 21 settembre 2026.