Pesquisando 50.000 e-mails em milissegundos: como funciona o índice local do MailVault
Digite uma palavra no MailVault e as correspondências mais recentes já estão na tela antes mesmo de você soltar a tecla. Para confirmar que isso continua valendo quando uma caixa de correio é realmente grande, montamos um cofre com 50.000 mensagens e cronometramos a pesquisa. A consulta mais lenta que rodamos levou 14 milissegundos.
Este artigo traz os números reais, o que foi medido e o que não foi, e a tecnologia por trás deles: um banco de dados SQL pequeno e simples que fica dentro do seu cofre.
O teste
Geramos 50.000 mensagens de cerca de 3.3 KB cada, no formato multipart com HTML e texto simples que os e-mails reais têm. Elas foram distribuídas em três pastas (Caixa de entrada, Arquivo e Enviados, cerca de um terço em cada) com palavras conhecidas plantadas em taxas conhecidas: “invoice” em 5% das mensagens, “budget” em 8%, “meeting” em 6%, além de palavras em japonês e com acentos para exercitar a pesquisa em outros idiomas. Cada mensagem passou pelo analisador MIME e pelo código de índice reais do MailVault, em uma build de release.
A máquina era um Mac mini Apple M4 com 16 GB de memória. Ela não estava ociosa: outras builds estavam rodando nela durante os testes, então trate os tempos como o que você obtém em um computador ocupado. Cada consulta rodou seis vezes, três em uma build de teste da correção e três no código já integrado. Os números abaixo são a faixa entre essas execuções, e cada tempo cobre a pesquisa mais a montagem das linhas de resultado que você vê na lista.
Os resultados
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
Vale extrair duas coisas dessa tabela. Primeiro, o tempo não está ligado ao número de correspondências: 15 resultados levaram mais tempo que 2.500, porque o que custa tempo é o formato da consulta (uma frase de duas palavras dá mais trabalho que uma palavra só), e não a quantidade de e-mails devolvidos. Segundo, a lista mostra no máximo as 500 correspondências mais recentes e avisa quando há mais, então desenhar os resultados é um trabalho limitado, não importa quantas mensagens correspondam.

O custo único é construir o índice: cerca de onze segundos para 50.000 mensagens, aproximadamente 4.000 mensagens por segundo, e 225 MB de disco. Isso acontece em segundo plano, você pode continuar usando o MailVault enquanto ele roda, e depois disso só as mensagens novas e alteradas são indexadas.

Como são 1 ms e 7 ms
Milissegundos são difíceis de imaginar, então aqui vai uma régua. Uma tela de 60 Hz se redesenha a cada 16.7 ms, e até a pesquisa mais lenta daqui terminou dentro de um único redesenho. A pesquisa de usabilidade usa os mesmos três limites desde 1993: abaixo de 0.1 segundo parece instantâneo, até 1 segundo mantém o fio do pensamento e, aos 10 segundos, a atenção já se foi. Quatorze milissegundos é cerca de um sétimo do limite de “instantâneo”. O filtro de data, com 1 ms, fica cem vezes abaixo dele.
E-mail do servidor, arquivo e backup: uma só pesquisa

O MailVault mantém três tipos de e-mail lado a lado: mensagens sincronizadas do seu servidor, mensagens que você arquivou e mensagens restauradas de um backup. Todas acabam como arquivos no mesmo cofre, então todas entram no mesmo índice. No teste, o e-mail ficou em uma pasta Caixa de entrada, uma Arquivo e uma Enviados, e uma única consulta cobriu tudo. De onde a mensagem veio não muda a velocidade com que ela é encontrada.
O e-mail que está só no servidor e nunca foi baixado não está no cofre, então o índice local não tem como conhecê-lo. Para esse caso, o MailVault também consulta o servidor, e os resultados locais indexados aparecem primeiro enquanto o servidor responde. Essa etapa depende do seu provedor, então não publicamos número para ela. O Premium pode pesquisar até cinco caixas do servidor ao mesmo tempo, em vez de uma.
A unidade de backup externa é uma segunda cópia, fria. A pesquisa roda no seu cofre de trabalho, e os resultados são marcados quando existe também uma cópia na unidade de backup.
A tecnologia: um banco de dados SQL muito rápido e muito simples
Não há servidor de pesquisa nem serviço na nuvem. O índice é um único arquivo SQLite dentro do seu cofre, e o SQLite é provavelmente o banco de dados mais amplamente usado do mundo. O MailVault usa o mecanismo de pesquisa em texto completo dele, o FTS5, com um tokenizador trigram: cada palavra é armazenada como pedaços sobrepostos de três letras. É por isso que você pode digitar “voic” e encontrar “invoice”, sem curingas e sem regras de palavra exata. Os acentos são ignorados na comparação, então “reunion” encontra “Réunion”. Japonês e chinês, que não usam espaços entre as palavras, passam por uma segunda tabela feita para eles.
A velocidade vem de três decisões simples:
- A pesquisa nunca abre um arquivo de mensagem. Tudo o que a lista precisa (remetente, assunto, data, pasta, marcadores) fica guardado na linha do índice. Durante o teste com 50.000 mensagens, o analisador de e-mail foi chamado zero vezes enquanto os resultados eram montados.
- Um arquivo, um processo. O índice pertence ao auxiliar em segundo plano do MailVault, é aberto uma vez e mantido pronto para uso. Não há nada para iniciar e nada para enviar por uma rede.
- Seu disco continua sendo a fonte da verdade. O índice é um dado derivado. Se um dia ele for danificado, o MailVault o reconstrói a partir das suas mensagens salvas e nunca mexe nas mensagens em si.
Funciona offline, e nada sai do seu computador.
Anexos e imagens (Premium)
A pesquisa gratuita cobre remetentes, assuntos e corpos de mensagem. O Premium acrescenta o texto dentro dos anexos, no mesmo índice e na mesma caixa de pesquisa:
- Texto de anexos. Arquivos PDF, Word, Excel e PowerPoint são lidos e o texto deles é indexado, então uma pesquisa por um número de contrato encontra a mensagem cujo PDF o contém.
- Texto de imagens e digitalizações no macOS. O MailVault usa o framework Vision da Apple no seu Mac para reconhecer texto em fotos, capturas de tela e páginas digitalizadas, e depois o indexa. O reconhecimento roda no próprio dispositivo. Windows e Linux não têm essa etapa.
Um resultado que existe só dentro de um anexo é marcado com um clipe de papel, para você saber por que um e-mail com um corpo sem nada de especial apareceu. Não cronometramos a extração de anexos neste teste: ela depende dos seus arquivos e roda uma vez por anexo em segundo plano, não no momento da pesquisa.
Como outros clientes descrevem a pesquisa deles
Não fizemos benchmark de outros aplicativos de e-mail, e nenhum dos abaixo publica tempos de pesquisa com 50.000 mensagens, então isto é uma comparação de projetos, não de cronômetros:
- Apple Mail: a Apple diz que a primeira indexação do Spotlight pode levar horas ou até dias, dependendo da quantidade de dados, e que o Mail pode mostrar um aviso de que a indexação ainda está incompleta.
- O Outlook para Windows usa o índice do Windows Search, e a Microsoft observa que os resultados podem ficar incompletos até a indexação terminar, que só o e-mail em cache local é indexado e que itens mais antigos podem ficar ocultos quando uma pesquisa retorna resultados demais.
- O Thunderbird mantém um índice global em seu próprio banco de dados. O rastreador de bugs dele tem relatos antigos de indexação ficando lenta em caixas de correio grandes, incluindo um usuário que relatou vários dias para 36.000 mensagens. São relatos de usuários em hardware mais antigo e não são diretamente comparáveis ao nosso teste.
Nossa escolha de projeto é o oposto da usual: indexamos a sua própria cópia salva, a mantemos em um único arquivo pequeno e deixamos o caminho da consulta curto o bastante para que a resposta seja medida em milissegundos.
O que este teste não mostra
A caixa de correio é sintética. E-mails reais têm mensagens maiores e mais bagunçadas, então o índice será maior para você se os corpos forem longos, embora uma consulta ainda percorra o índice, não os seus arquivos. Os tempos são com cache aquecido: a primeira pesquisa depois de uma reinicialização lê mais do disco. O teste cobre assuntos, remetentes e corpos, não texto de anexos, e foi rodado em uma única máquina.
Você pode repetir a medição por conta própria: o benchmark é o teste em Rust ignorado search_index_bench_50k_real_parser na árvore de código-fonte do MailVault, e ele imprime todos os números acima.
Encontre em milissegundos o e-mail de seis anos atrás.
O MailVault mantém um índice de pesquisa privado ao lado do seu arquivo, então pesquisar 50.000 mensagens é tão fácil quanto pesquisar 500. Uso gratuito. A pesquisa em anexos e imagens vem com o Premium.
Fontes: Suporte da Apple, indexação do Spotlight; Suporte da Microsoft, problemas de pesquisa do Outlook; Mozilla Bugzilla 585429. Benchmark medido em 21 de setembro de 2026.