Guía rápida — Optimizar una base de datos MySQL
Prácticas y comandos clave para mejorar rendimiento en MySQL / MariaDB.
1. Diseño
- Normaliza para integridad; desnormaliza cuando la lectura sea crítica.
- Usa tipos de datos adecuados:
INT
,VARCHAR
con tamaño razonable, evitaTEXT
si no hace falta. - Llaves primarias simples y auto-incrementales; evita claves compuestas largas si no son necesarias.
- Considera particionamiento para tablas muy grandes.
2. Índices
- Crea índices en columnas usadas en
WHERE
,JOIN
yORDER BY
. - Usa índices compuestos con el orden de columnas que refleja las consultas.
- Elimina índices no utilizados para mejorar INSERT/UPDATE.
-- Índice simple
CREATE INDEX idx_cliente_ciudad ON clientes(ciudad);
-- Índice compuesto
CREATE INDEX idx_pedidos_cliente_fecha ON pedidos(cliente_id, fecha);
3. Optimizar consultas
- Evita
SELECT *
; pide solo las columnas necesarias. - Usa
EXPLAIN
para ver si las consultas usan índices o hacen table scans. - Evita funciones en columnas indexadas; cuando uses rangos de fecha, prefiere comparaciones con
BETWEEN
o intervalos.
EXPLAIN SELECT id, nombre FROM clientes WHERE ciudad = 'Barcelona';
4. Configuración del servidor (my.cnf)
- innodb_buffer_pool_size: ajusta al 60-70% de la RAM si el servidor es dedicado a MySQL.
- innodb_log_file_size: archivos de log mayores reducen switches frecuentes.
- tmp_table_size y max_heap_table_size para tablas temporales en memoria.
[mysqld]