El particionado en MySQL es una técnica que permite dividir una tabla grande en partes más pequeñas (particiones), manteniendo la ilusión de que sigue siendo una única tabla.
Esto es clave cuando trabajamos con:
- Grandes volúmenes de datos (millones o billones de filas)
- Consultas que pueden beneficiarse de “leer menos datos”
- Mantenimiento más eficiente (archivar, borrar, etc.)
Imaginemos una tabla de logs:
logs(id, fecha, usuario, accion)
Con millones de registros, consultas como:
SELECT * FROM logs WHERE fecha >= '2026-01-01';
terminan escaneando demasiados datos.
Con particionado, MySQL puede hacer partition pruning:
- Solo accede a las particiones relevantes
- Reduce I/O y mejora performance
Tipos de particionado en MySQL
RANGE (por rango)
Ideal para fechas o valores ordenados.
CREATE TABLE logs (
id INT,
fecha DATE,
mensaje VARCHAR(255)
)
PARTITION BY RANGE (YEAR(fecha)) (
PARTITION p2023 VALUES LESS THAN (2024),
PARTITION p2024 VALUES LESS THAN (2025),
PARTITION pFuture VALUES LESS THAN MAXVALUE
);
Muy usado para:
- Logs
- Eventos
- Datos históricos
LIST (por valores específicos)
CREATE TABLE usuarios (
id INT,
pais VARCHAR(50)
)
PARTITION BY LIST COLUMNS(pais) (
PARTITION p_latam VALUES IN ('Argentina', 'Brasil'),
PARTITION p_europa VALUES IN ('España', 'Francia')
);
Útil cuando tenés categorías bien definidas.
HASH (distribución uniforme)
CREATE TABLE pedidos (
id INT,
cliente_id INT
)
PARTITION BY HASH(cliente_id)
PARTITIONS 4;
MySQL distribuye automáticamente los datos.
KEY (similar a HASH pero interno)
CREATE TABLE sesiones (
id INT,
usuario_id INT
)
PARTITION BY KEY(usuario_id)
PARTITIONS 4;
Usa funciones hash internas de MySQL.
Limitaciones importantes
Antes de usar particionado, hay que tener en cuenta:
- Todas las claves primarias deben incluir la columna de partición
- No todas las engines soportan particionado (InnoDB sí)
- No reemplaza índices (se complementan)
- Puede complicar el diseño si no se usa bien
Cuándo usar particionado:
✔️ Tablas muy grandes (millones de filas)
✔️ Consultas filtradas por la columna de partición
✔️ Necesidad de borrar datos antiguos fácilmente
Cuándo NO usar particionado:
❌ Tablas pequeñas
❌ Consultas que no usan la columna de partición
❌ Como reemplazo de índices












.jpeg)

