Back

PostgreSQL vs MySQL vs MongoDB en 2026: La Comparación Honesta que Nadie Pidió

Cada pocos meses, el mismo debate resurge en Reddit, Hacker News y el Slack de tu equipo: "¿Qué base de datos deberíamos usar?" Y cada vez, las respuestas van desde "solo usa Postgres para todo" hasta memes de "MongoDB is web scale" de 2012.

Aquí está la verdad que nadie quiere admitir: no existe una base de datos universalmente "mejor". Pero SÍ hay elecciones correctas e incorrectas para situaciones específicas. Esta guía te ayudará a tomar esa decisión con datos reales, no lealtad tribal.

Vamos a resolver esto de una vez—o al menos hasta 2027.

Respuesta rápida (TL;DR)

Antes de profundizar, aquí está la matriz de decisión que la mayoría de equipos debería seguir:

Caso de UsoMejor OpciónPor Qué
App web generalPostgreSQLTodo-en-uno, ACID, buen ecosistema
WordPress/CMS con muchas lecturasMySQLOptimizado para lectura, replicación madura
Prototipado rápidoMongoDBSchema flexible, iteración rápida
Queries complejas y analyticsPostgreSQLMejor planificador de queries
Apps centradas en documentosMongoDBStorage nativo de documentos
Migración legacyMySQLMayor soporte de hosting

Ahora entendamos por qué existen estas recomendaciones.

PostgreSQL: La Navaja Suiza

PostgreSQL se ha convertido en la recomendación por defecto en 2026, y con razón. No es porque esté de moda—es porque genuinamente hace casi todo bien.

Lo que hace bien PostgreSQL

1. ACID Que Realmente Funciona

La implementación MVCC de PostgreSQL está probada en batalla:

-- PostgreSQL maneja esto correctamente, siempre BEGIN; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT;

Nunca verás actualizaciones parciales o lecturas fantasma con un manejo correcto de transacciones.

2. Tipos de Datos Avanzados

PostgreSQL ya no se trata solo de filas y columnas:

-- JSON con indexación real CREATE TABLE events ( id SERIAL PRIMARY KEY, data JSONB, created_at TIMESTAMPTZ DEFAULT NOW() ); CREATE INDEX idx_events_data ON events USING GIN (data); -- Consulta JSON como si fuera NoSQL SELECT * FROM events WHERE data @> '{"type": "purchase", "amount": {"$gt": 100}}';
-- Arrays como ciudadanos de primera clase CREATE TABLE users ( id SERIAL PRIMARY KEY, name TEXT, tags TEXT[], preferences JSONB ); SELECT * FROM users WHERE 'premium' = ANY(tags);
-- Búsqueda full-text sin Elasticsearch SELECT * FROM articles WHERE to_tsvector('spanish', title || ' ' || body) @@ to_tsquery('spanish', 'database & performance');

3. Ecosistema de Extensiones

El sistema de extensiones de PostgreSQL no tiene rival:

  • PostGIS: Soporte geoespacial completo (usado por OpenStreetMap, Uber)
  • TimescaleDB: Datos de series temporales a escala
  • pgvector: Embeddings vectoriales para AI/ML
  • Citus: Sharding horizontal para escala masiva
-- Ejemplo: Búsqueda de similaridad vectorial para IA CREATE EXTENSION vector; CREATE TABLE documents ( id SERIAL PRIMARY KEY, content TEXT, embedding vector(1536) -- Dimensiones de embedding de OpenAI ); -- Encontrar documentos similares SELECT * FROM documents ORDER BY embedding <-> '[0.1, 0.2, ...]' -- Tu vector de consulta LIMIT 10;

Dónde flaquea PostgreSQL

  • Complejidad de replicación: Requiere más expertise que MySQL
  • Uso de recursos: Usa más memoria para cargas simples
  • Hosting compartido: Menos común en planes baratos

MySQL: El Caballo de Batalla Confiable

MySQL alimenta más sitios web que cualquier otra base de datos. WordPress, Drupal, Joomla y muchas apps custom dependen de él.

Lo que hace bien MySQL

1. Rendimiento de Lectura

-- MySQL destaca en lecturas simples de alto volumen SELECT id, title, created_at FROM posts WHERE status = 'published' ORDER BY created_at DESC LIMIT 20;

Para lecturas típicas de apps web, MySQL suele ser 10-20% más rápido que PostgreSQL.

2. Replicación Simple

Configurar réplicas de lectura en MySQL es directo:

-- En el primario SHOW MASTER STATUS; -- En la réplica CHANGE REPLICATION SOURCE TO SOURCE_HOST='primary.example.com', SOURCE_USER='replication_user', SOURCE_PASSWORD='password'; START REPLICA;

3. Herramientas y Hosting

Cada proveedor de hosting soporta MySQL. Cada herramienta de backup soporta MySQL. Esto importa más de lo que nos gustaría admitir.

4. Características Modernas de MySQL 8.x

-- Window functions (¡por fin!) SELECT name, department, salary, RANK() OVER (PARTITION BY department ORDER BY salary DESC) as dept_rank FROM employees; -- CTEs WITH regional_sales AS ( SELECT region, SUM(amount) as total FROM orders GROUP BY region ) SELECT * FROM regional_sales WHERE total > 1000000;

Dónde flaquea MySQL

  • Queries complejas: El planificador toma decisiones subóptimas más a menudo
  • Tipos avanzados: Sin tipo array nativo, JSON limitado
  • Extensiones: Nada comparable a PostGIS o pgvector

MongoDB: La Base de Datos de Documentos

MongoDB ocupa un nicho completamente diferente. No es un reemplazo de bases SQL—es una alternativa cuando los modelos relacionales se vuelven una carga.

Lo que hace bien MongoDB

1. Flexibilidad de Schema

Cuando tu estructura de datos es genuinamente impredecible:

// Catálogo de productos con atributos variables db.products.insertMany([ { name: "Camiseta", price: 29.99, sizes: ["S", "M", "L", "XL"], colors: ["rojo", "azul", "negro"] }, { name: "Laptop", price: 999.99, specs: { cpu: "M3 Pro", ram: "18GB", storage: "512GB SSD" } } ]);

2. Documentos Embebidos

Cuando lees grafos de objetos completos juntos:

// Post de blog con comentarios - sin joins db.posts.insertOne({ title: "MongoDB en 2026", author: { name: "Juan", avatar: "/avatars/juan.jpg" }, comments: [ { user: "alice", text: "¡Gran post!", likes: 42 } ] }); // Una sola query devuelve todo db.posts.findOne({ _id: postId });

3. Escalabilidad Horizontal

El sharding de MongoDB está integrado:

// Shardear una colección sh.shardCollection("mydb.orders", { customer_id: "hashed" }); // MongoDB distribuye datos automáticamente

Para datasets masivos (billones de documentos), el escalado horizontal de MongoDB es más simple que PostgreSQL con Citus o MySQL con Vitess.

4. Experiencia de Desarrollador

El driver de MongoDB se siente nativo para desarrolladores JavaScript/TypeScript:

// Integración natural con JavaScript/TypeScript const orders = await db.collection('orders') .find({ status: 'pending', createdAt: { $gte: yesterday } }) .sort({ createdAt: -1 }) .limit(50) .toArray(); // Los pipelines de agregación son poderosos const salesByRegion = await db.collection('orders') .aggregate([ { $match: { status: 'completed' } }, { $group: { _id: '$region', total: { $sum: '$amount' } } }, { $sort: { total: -1 } } ]) .toArray();

Dónde flaquea MongoDB

  • Transacciones: Multi-documento funciona pero es más lento
  • Joins: $lookup existe pero es menos eficiente
  • Integridad de datos: Sin foreign keys significa checks de consistencia a nivel de app
  • Eficiencia de storage: Los documentos duplican datos que serían normalizados en SQL
  • Queries complejas: Los pipelines pueden complicarse

Benchmarks reales

Veamos datos reales de benchmarks 2024-2025:

Rendimiento de Lectura Simple (ops/segundo, mayor es mejor)

Tipo de QueryPostgreSQL 16MySQL 8.4MongoDB 7
Lookup por ID125,000142,000118,000
Query de rango18,50021,20015,800
Búsqueda full-text8,2003,1006,500
Query JSON45,00028,00052,000

Rendimiento de Escritura (ops/segundo)

OperaciónPostgreSQL 16MySQL 8.4MongoDB 7
Insert simple32,00038,00042,000
Insert bulk (1000)285,000310,000380,000
Update por ID28,00031,00035,000
Transacción (3 ops)12,00014,0008,500

Rendimiento de Queries Complejas (ms, menor es mejor)

Tipo de QueryPostgreSQL 16MySQL 8.4MongoDB 7
Join de 5 tablas12ms18msN/A*
Funciones window8ms15ms45ms**
Subquery15ms32msN/A*
Agregación22ms28ms18ms

*MongoDB requiere desnormalización o múltiples queries
**Via pipeline de agregación

Conclusiones clave:

  • MySQL gana en lecturas simples de alto volumen
  • PostgreSQL gana en queries complejas
  • MongoDB gana en operaciones de documentos y escrituras
  • Tu carga específica importa más que benchmarks generales

Cómo decidir

Elige PostgreSQL si:

  1. Construyes una app nueva desde cero
  2. Tus datos son relacionales
  3. Necesitas queries complejas, reporting o analytics
  4. Quieres una DB que haga todo razonablemente bien
  5. Puede que necesites geoespacial, full-text o vector search después

Elige MySQL si:

  1. Usas WordPress, Drupal u otro CMS PHP
  2. Tu hosting está limitado a MySQL
  3. Tienes expertise e infraestructura MySQL existente
  4. Tu carga es principalmente lecturas simples
  5. Necesitas replicación probada con mínima configuración

Elige MongoDB si:

  1. Tus datos son genuinamente orientados a documentos
  2. El schema evoluciona rápida e impredeciblemente
  3. Necesitas escalabilidad horizontal entre regiones
  4. Tu equipo es heavy en JavaScript y prefiere JSON
  5. Construyes apps en tiempo real (IoT, gaming, chat)
  6. Estás prototipando y no conoces el schema final

Cuándo usar múltiples bases de datos

Muchos sistemas en producción usan persistencia políglota:

┌─────────────────────────────────────────────────────────┐
│                     Aplicación                           │
├─────────────────────────────────────────────────────────┤
│  PostgreSQL          │  MongoDB         │  Redis        │
│  ─────────────       │  ────────        │  ─────        │
│  Usuarios            │  Catálogo        │  Sesiones     │
│  Pedidos             │  Event Logs      │  Cache        │
│  Transacciones       │  Contenido CMS   │  Rate Limits  │
└─────────────────────────────────────────────────────────┘

Esto está bien. Usa la herramienta correcta para cada trabajo. Solo no compliques las cosas para una app pequeña.

La controversia de MongoDB

Hablemos del elefante en la habitación: MongoDB estuvo sobrevalorado a principios de los 2010. Muchos equipos lo usaron para cargas que PostgreSQL habría manejado mejor, lo que llevó al dolor y al infame meme "MongoDB is web scale".

MongoDB NO es buena opción para:

  • Transacciones financieras que requieren consistencia fuerte
  • Datos relacionales con joins complejos
  • Apps que requieren validación estricta de datos
  • Equipos sin experiencia NoSQL

MongoDB SÍ es buena opción para:

  • Sistemas de gestión de contenido
  • Logging de eventos y analytics
  • Catálogos con atributos variables
  • Datos en tiempo real (IoT, gaming)
  • Prototipado rápido cuando no conoces el schema

Consideraciones de migración

PostgreSQL ↔ MySQL

Ambos son SQL, así que la migración es relativamente directa:

# MySQL a PostgreSQL pgloader mysql://user:pass@host/db postgresql://user:pass@host/db # PostgreSQL a MySQL (requiere más trabajo manual) pg_dump --no-owner --no-privileges db | mysql db

Diferencias clave:

  • AUTO_INCREMENT (MySQL) vs SERIAL (PostgreSQL)
  • Backticks (MySQL) vs comillas dobles (PostgreSQL) para identificadores
  • LIMIT offset, count (MySQL) vs LIMIT count OFFSET offset (PostgreSQL)

SQL a MongoDB

La migración de SQL a MongoDB requiere rediseño del schema:

-- SQL: Estructura normalizada SELECT orders.*, customers.name, items.product_name FROM orders JOIN customers ON orders.customer_id = customers.id JOIN order_items items ON items.order_id = orders.id WHERE orders.id = 123;
// MongoDB: Documento desnormalizado { _id: 123, customer: { id: 1, name: "Juan García" }, items: [ { product_name: "Widget", quantity: 2, price: 10.00 } ], total: 20.00, status: "enviado" }

No es solo una migración técnica—es un cambio fundamental en la filosofía de modelado de datos.

Comparación de costos (2026)

Servicios gestionados (mensual, specs comparables)

Base de DatosAWSGCPAzure
PostgreSQLRDS: $150+Cloud SQL: $140+Azure DB: $145+
MySQLRDS: $145+Cloud SQL: $135+Azure DB: $140+
MongoDBDocumentDB*: $180+Atlas: $200+Cosmos DB: $220+

*DocumentDB es compatible con MongoDB, no es MongoDB en sí

Self-Hosted (gratis, pero considera el costo de ops)

Las tres son open source (MongoDB tiene preocupaciones con la licencia SSPL). Pero "gratis" no cuenta:

  • El tiempo de tus ingenieros gestionando la base de datos
  • Infraestructura de backup y recuperación
  • Setup de alta disponibilidad
  • Parches de seguridad

Regla general: Usa servicios gestionados a menos que tengas un DBA dedicado o restricciones de costo significativas.

Conclusión: La recomendación honesta

Si llegaste hasta aquí y aún no puedes decidir:

Empieza con PostgreSQL.

No es porque PostgreSQL sea objetivamente "el mejor"—es porque tiene la mejor relación riesgo/recompensa para la mayoría de apps:

  1. Maneja el 90% de casos de uso bien
  2. No te limitará cuando escales
  3. Tiene el mejor ecosistema de extensiones
  4. Es el estándar de la industria por buenas razones
  5. Siempre puedes añadir MongoDB o Redis después

MySQL sigue siendo excelente para apps PHP y cargas de lectura donde ya tienes expertise.

MongoDB es valioso cuando tienes datos genuinamente orientados a documentos—solo entra con los ojos abiertos sobre sus trade-offs.

Las guerras de bases de datos son mayormente tribales a estas alturas. Las tres son tecnologías production-ready que alimentan las apps más grandes del mundo.

Ahora ve a construir algo. La base de datos estará bien.

databasepostgresqlmysqlmongodbbackendsystem-designweb-development

Explora herramientas relacionadas

Prueba estas herramientas gratuitas de Pockit