¿QUÉ ES EL TIPO DE DATO VECTOR EN MARIADB?
El tipo de dato VECTOR(N) permite almacenar vectores de alta dimensión (embeddings) directamente en MariaDB. Un vector es simplemente una lista ordenada de números de punto flotante (float32). Estos vectores suelen generarse con modelos de Inteligencia Artificial para representar el significado semántico de texto, imágenes, audio, etc. "N" es número de dimensiones (tamaño fijo del vector). Ejemplos comunes de dimensiones: 384, 768, 1024, 1536 (OpenAI text-embedding-3-small), 3072, etc. El máximo soportado son 16383 dimensiones.Esto convierte a MariaDB en una base de datos vectorial y relacional completa ya que se pueden combinar datos tradicionales (VARCHAR, TEXT, JSON, etc.) con búsquedas semánticas de forma nativa.
El tipo de dato VECTOR está disponible en MariaDB a partir de las versiones:
- MariaDB Community Server 11.7 introducido en esta versión; generalmente disponible / GA en 11.7.
- MariaDB Community Server 11.8 LTS y posteriores (primera versión LTS con soporte completo y estable.
- MariaDB Enterprise Server 11.4.5-3 y posteriores; también incluido en Enterprise 11.8.
Ejemplo completo de tabla
CREATE TABLE documentos (
id INT AUTO_INCREMENT PRIMARY KEY,
titulo VARCHAR(500),
contenidoLONGTEXT,
embeddingVECTOR(1536) NOT NULL,-- Vector de 1536 dimensiones
-- Índice vectorial (obligatorio para búsquedas rápidas)
VECTOR INDEX idx_embedding (embedding)
-- Opcional: especificar distancia y parámetro M
-- DISTANCE=cosine, M=16
);
Opciones del VECTOR INDEX
- DISTANCE=euclidean (por defecto) → Distancia euclidiana (L2).
- DISTANCE=cosine → Similaridad coseno (muy usada en embeddings de texto).
- M → Parámetro que controla calidad/velocidad del índice (valores típicos: 8 a 64). Mayor M = mejor precisión pero más lento y más espacio.
- MariaDB Community Server 11.7 introducido en esta versión; generalmente disponible / GA en 11.7.
- MariaDB Community Server 11.8 LTS y posteriores, primera versión LTS con soporte completo y estable.
- MariaDB Enterprise Server 11.4.5-3 y posteriores; también incluido en Enterprise 11.8.
Cómo insertar vectores
MariaDB no genera los embeddings, eso lo hace el modelo de IA. Tú generas el vector fuera y lo insertas.-- Usando VEC_FromText() (muy práctico)
INSERT INTO documentos (titulo, contenido, embedding)
VALUES (
'Guía de MariaDB',
'Explicación sobre el tipo VECTOR...',
VEC_FromText('[0.12, -0.45, 0.78, ..., 0.23]')-- string con formato JSON-like
);
También se puede insertar directamente como BLOB binario ya que es más eficiente en producción.
Consultas más comunes (Búsqueda de similitud)
-- Buscar los 5 documentos más similares a una consulta del usuario
SELECT
id,
titulo,
contenido,
VEC_DISTANCE(embedding, VEC_FromText('[0.15, -0.40, ...]')) AS distancia
FROM documentos
ORDER BY distancia ASC -- o DESC si usas cosine
LIMIT 5;
- "VEC_DISTANCE(vec1, vec2)" → Distancia euclidiana
- "VEC_DISTANCE_COSINE(vec1, vec2)" → Similaridad coseno (recomendada para texto)
- "VEC_FromText() / VEC_ToText()" → Convertir entre string y vector
Ventajas de usar VECTOR en MariaDB
- Todo queda en una sola base de datos (no necesitas Pinecone, Weaviate, Chroma, etc.).
- Se pueden combinar filtros tradicionales + búsqueda vectorial en la misma consulta.
- Soporta transacciones completas y ACID.
- Buen rendimiento gracias al algoritmo HNSW modificado.
- Integraciones fáciles con LangChain, LlamaIndex, Spring AI, etc.
Recomendaciones prácticas
- Usar siempre VECTOR INDEX en la columna de embeddings.
- Prefiere DISTANCE=cosine para embeddings de texto.
- Prueba diferentes valores de M según tu caso (empieza con 16-32).
- Genera embeddings con modelos de buena calidad (no ahorres aquí).
- Combina con índices normales en otras columnas para filtros híbridos.
Usos más habituales del tipo VECTOR en MariaDB
| Uso | Descripción | Ejemplo típico de dimensiones |
|---|---|---|
| Búsqueda Semántica | Buscar por significado en lugar de palabras clave | 768 – 1536 |
| RAG (Retrieval-Augmented Generation) | Alimentar LLMs con tus propios documentos de forma relevante | 1536 |
| Sistemas de Recomendación | Recomendar productos, artículos, películas según similitud | 384 – 1024 |
| Búsqueda de Imágenes | Buscar imágenes similares usando embeddings visuales (CLIP, etc.) | 512 – 2048 |
| Chatbots con memoria propia | Guardar conversaciones o conocimiento empresarial y recuperar contexto | 1536 |
| Detección de duplicados | Encontrar textos o productos muy similares | 768 |