Skip to content
← Volver al blog

Buscar entre 50.000 correos en milisegundos: cómo funciona el índice local de MailVault

7 min de lectura

Escribe una palabra en MailVault y las coincidencias más recientes aparecen en pantalla antes de que termines de pulsar la tecla. Para comprobar que esto se mantiene cuando un buzón es realmente grande, construimos una bóveda de 50.000 mensajes y medimos la búsqueda. La consulta más lenta que probamos tardó 14 milisegundos.

Esta entrada trae las cifras reales, lo que se midió y lo que no, y la tecnología que hay detrás: una base de datos SQL pequeña y sencilla que vive dentro de tu bóveda.

La prueba

Generamos 50.000 mensajes de unos 3,3 KB cada uno, con la forma multipart de HTML más texto sin formato que tiene el correo real. Los repartimos en tres carpetas (Bandeja de entrada, Archivo y Enviados, aproximadamente un tercio cada una) con palabras conocidas colocadas a ritmos conocidos: «invoice» en el 5 % de los mensajes, «budget» en el 8 %, «meeting» en el 6 %, además de palabras en japonés y con acentos para ejercitar la búsqueda en otros idiomas. Cada mensaje pasó por el analizador MIME real de MailVault y por el código de índice real, en una compilación de release.

La máquina fue un Mac mini Apple M4 con 16 GB de memoria. No estaba ocioso: había otras compilaciones en marcha durante las pruebas, así que toma los tiempos como lo que obtienes en un ordenador ocupado. Cada consulta se ejecutó seis veces, tres sobre una compilación de prueba de la corrección y tres sobre el código ya integrado. Las cifras de abajo son el intervalo de esas ejecuciones, y cada tiempo cubre la búsqueda más la construcción de las filas de resultado que ves en la lista.

Los 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

De esa tabla se pueden sacar dos conclusiones. Primero, el tiempo no depende del número de coincidencias: 15 resultados tardaron más que 2.500, porque lo que cuesta tiempo es la forma de la consulta (una frase de dos palabras da más trabajo que una sola palabra), no cuánto correo devuelve. Segundo, la lista muestra como máximo las 500 coincidencias más recientes y lo indica cuando hay más, así que dibujar los resultados es un trabajo acotado sea cual sea el número de mensajes que coincidan.

Resultados de búsqueda de MailVault para la palabra invoice en una bóveda de 50 000 mensajes. Bajo el cuadro de búsqueda, el encabezado indica que la lista muestra los 500 más recientes de unas 2500 coincidencias guardadas en todas las carpetas, encima de una lista de filas de mensajes.
El mismo tipo de búsqueda en la app: «invoice» sobre una bóveda de 50 000 mensajes. La lista muestra los 500 más recientes de unas 2500 coincidencias guardadas y lo indica. Las pocas filas de arriba vienen de los buzones de demostración que comparten esta ventana, y las carpetas de la bóveda se llaman Projects, Correspondence y Clients, no como las del 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
Tiempo de búsqueda por consulta en 50.000 mensajes. Todas las barras terminan antes de la siguiente actualización de pantalla a 60 Hz.

El coste que se paga una sola vez es construir el índice: unos once segundos para 50.000 mensajes, más o menos 4.000 mensajes por segundo, y 225 MB de disco. Ocurre en segundo plano, puedes seguir usando MailVault mientras tanto, y después solo se indexan los mensajes nuevos y los modificados.

MailVault, Ajustes, pestaña Almacenamiento, tarjeta Índice de búsqueda con 50 000 / 50 000 indexados y unos 270 MB, con interruptores para el cuerpo de los mensajes, el texto de los adjuntos y el texto en imágenes.
Ajustes, Almacenamiento, Índice de búsqueda al terminar la construcción: 50 000 de 50 000 mensajes indexados, unos 270 MB en disco. Es una ejecución aparte en la app, por eso su tamaño difiere de los 225 MB de la tabla del benchmark de arriba.

Qué se siente con 1 ms y con 7 ms

Los milisegundos son difíciles de imaginar, así que aquí tienes una regla. Una pantalla de 60 Hz se redibuja cada 16,7 ms, y hasta la búsqueda más lenta de esta prueba terminó dentro de un solo redibujado. La investigación de usabilidad usa los mismos tres límites desde 1993: por debajo de 0,1 segundos se siente instantáneo, hasta 1 segundo no se rompe tu hilo de pensamiento, y a los 10 segundos tu atención ya se ha ido. Catorce milisegundos es aproximadamente una séptima parte del límite de lo «instantáneo». El filtro de fechas, con 1 ms, queda cien veces por debajo.

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)
Tiempo en escala logarítmica, de 1 milisegundo a 100 segundos. Cada marca es diez veces la anterior. Límites de tiempo de respuesta: Jakob Nielsen. El punto de 88 s es lo que proyectaba la búsqueda original, archivo por archivo, en una carpeta de 20.000 mensajes.

Correo del servidor, archivo y copia de seguridad: una sola búsqueda

Resultados de búsqueda de MailVault para una consulta, con la leyenda al pie que explica los marcadores solo en el servidor, en tu bóveda, única copia y en la unidad de copia de seguridad
Cada resultado indica dónde está el mensaje: solo en el servidor, en tu bóveda, la única copia, o en tu unidad de copia de seguridad.

MailVault guarda tres tipos de correo juntos: los mensajes sincronizados desde tu servidor, los que archivaste y los restaurados desde una copia de seguridad. Todos acaban como archivos en la misma bóveda, así que todos entran en el mismo índice. En la prueba, el correo estaba en una Bandeja de entrada, un Archivo y una carpeta Enviados, y una sola consulta lo cubrió todo. De dónde venga un mensaje no cambia lo rápido que se encuentra.

El correo que solo está en el servidor y nunca se ha descargado no está en la bóveda, así que el índice local no puede conocerlo. Para eso, MailVault también pregunta al servidor, y los resultados locales indexados aparecen primero mientras el servidor responde. Ese tramo depende de tu proveedor, así que no publicamos ninguna cifra para él. Premium puede buscar en hasta cinco buzones del servidor a la vez en lugar de uno.

La unidad externa de copia de seguridad es una segunda copia en frío. La búsqueda se ejecuta sobre tu bóveda de trabajo, y los resultados se marcan cuando también existe una copia en la unidad de copia de seguridad.

La tecnología: una base de datos SQL muy rápida y muy simple

No hay servidor de búsqueda ni servicio en la nube. El índice es un único archivo SQLite dentro de tu bóveda, y SQLite es probablemente la base de datos más extendida del mundo. MailVault usa su motor de búsqueda de texto completo, FTS5, con un tokenizador trigram: cada palabra se guarda como fragmentos solapados de tres letras. Por eso puedes escribir «voic» y encontrar «invoice», sin comodines ni reglas de palabra exacta. Los acentos se normalizan, así que «reunion» encuentra «Réunion». El japonés y el chino, que no usan espacios entre palabras, pasan por una segunda tabla creada para ellos.

La velocidad viene de tres decisiones sencillas:

  • La búsqueda nunca abre un archivo de mensaje. Todo lo que necesita la lista (remitente, asunto, fecha, carpeta, marcas) está guardado en la fila del índice. Durante la prueba de 50.000 mensajes, el analizador de correo se llamó cero veces mientras se construían los resultados.
  • Un archivo, un proceso. El índice pertenece al ayudante en segundo plano de MailVault, que lo abre una sola vez y lo mantiene listo. No hay nada que iniciar ni nada que enviar por una red.
  • Tu disco sigue siendo la fuente de verdad. El índice son datos derivados. Si alguna vez se daña, MailVault lo reconstruye a partir de tus mensajes guardados y nunca toca los mensajes en sí.

Funciona sin conexión y nada sale de tu ordenador.

Adjuntos e imágenes (Premium)

La búsqueda gratuita cubre remitentes, asuntos y cuerpos de mensaje. Premium añade el texto que hay dentro de los adjuntos, en el mismo índice y el mismo cuadro de búsqueda:

  • Texto de los adjuntos. Se leen los archivos PDF, Word, Excel y PowerPoint y se indexa su texto, así que buscar un número de contrato encuentra el mensaje cuyo PDF lo contiene.
  • Texto de imágenes y escaneos en macOS. MailVault usa el framework Vision de Apple en tu Mac para reconocer el texto de fotos, capturas de pantalla y páginas escaneadas, y después lo indexa. El reconocimiento se ejecuta en el propio dispositivo. Windows y Linux no tienen este paso.

Un resultado que existe solo dentro de un adjunto se marca con un clip, para que sepas por qué ha aparecido un correo con un cuerpo sin nada especial. En esta prueba no medimos la extracción de los adjuntos: depende de tus archivos y se ejecuta una vez por adjunto en segundo plano, no en el momento de buscar.

Cómo describen su búsqueda otros clientes

No hemos hecho benchmarks de otras apps de correo, y ninguna de las siguientes publica tiempos de búsqueda con 50.000 mensajes, así que esto es una comparación de diseños, no de cronómetros:

  • Apple Mail: Apple indica que la primera indexación de Spotlight puede tardar horas o incluso días según la cantidad de datos, y que Mail puede mostrar un aviso de que la indexación aún no ha terminado.
  • Outlook para Windows usa el índice de Windows Search, y Microsoft señala que los resultados pueden estar incompletos hasta que termine la indexación, que solo se indexa el correo en caché local y que los elementos más antiguos pueden quedar ocultos cuando una búsqueda devuelve demasiados.
  • Thunderbird mantiene un índice global en su propia base de datos. Su sistema de seguimiento de errores acumula desde hace tiempo informes sobre la indexación que se ralentiza en buzones grandes, incluido el de un usuario que habló de varios días para 36.000 mensajes. Son informes de usuarios con hardware más antiguo y no son directamente comparables con nuestra prueba.

Nuestra decisión de diseño es la contraria a la habitual: indexamos tu propia copia guardada, la mantenemos en un archivo pequeño y hacemos que el camino de la consulta sea lo bastante corto como para que la respuesta se mida en milisegundos.

Lo que esta prueba no muestra

El buzón es sintético. El correo real tiene mensajes más grandes y desordenados, así que el índice será mayor en tu caso si tus cuerpos de mensaje son largos, aunque una consulta sigue recorriendo el índice, no tus archivos. Los tiempos son con la caché caliente: la primera búsqueda tras reiniciar lee más del disco. La prueba cubre asuntos, remitentes y cuerpos, no el texto de los adjuntos, y se hizo en una sola máquina.

Puedes repetir la medición tú mismo: el benchmark es el test de Rust ignorado search_index_bench_50k_real_parser del código fuente de MailVault, y muestra todas las cifras anteriores.

Encuentra ese correo de hace seis años en milisegundos.

MailVault guarda un índice de búsqueda privado junto a tu archivo, así que buscar entre 50.000 mensajes es tan fácil como entre 500. Uso gratuito. La búsqueda en adjuntos e imágenes viene con Premium.

Fuentes: Soporte de Apple, indexación de Spotlight; Soporte de Microsoft, problemas de búsqueda en Outlook; Mozilla Bugzilla 585429. Benchmark medido el 21 de septiembre de 2026.