Cómo optimizar una base de datos MySQL en PrestaShop (tablas y consultas)
¿Por qué tu PrestaShop va lento y qué tiene que ver MySQL con esto?
Si tu tienda online hecha con PrestaShop va lenta, el problema casi nunca es el diseño o la conexión a internet. En la mayoría de los casos, el cuello de botella está en la base de datos MySQL. Cada vez que un cliente visita tu tienda, el servidor ejecuta decenas de consultas SQL para mostrar productos, precios, categorías, carritos y sesiones. Si esas consultas son lentas o la base de datos está llena de basura, la página tarda en cargar.
PrestaShop es un software muy completo, pero con el tiempo acumula tablas infladas, registros huérfanos y consultas ineficientes. El resultado: un rendimiento pobre que ahuyenta a clientes y perjudica tu posicionamiento SEO. Este artículo es una guía práctica para que optimices tu base de datos PrestaShop sin necesidad de ser un experto en programación.
Vamos paso a paso, desde lo más básico hasta técnicas más avanzadas de optimización de consultas. Al final, tu tienda cargará mucho más rápido y Google lo notará.
Primera regla: haz una copia de seguridad antes de tocar nada
Antes de ejecutar cualquier comando SQL, de limpiar tablas o de cambiar configuraciones, haz una copia de seguridad completa de tu base de datos. Un error de dedo puede borrar pedidos, clientes o productos. No hay excusa para saltarse este paso.
Puedes hacer la copia desde el panel de control de tu hosting (como Syspanel, que tiene un acceso sencillo al administrador de bases de datos en el puerto 2106) o usando herramientas como phpMyAdmin. Exporta la base de datos en formato SQL y descarga el archivo a tu ordenador. También es recomendable que la copia se realice con la tienda en modo mantenimiento para evitar datos inconsistentes.
[WARNING] Si usas Syspanel, recuerda que el acceso a la gestión de bases de datos se hace por el puerto 2106. No uses el puerto por defecto, te dará error de conexión.
Cómo optimizar base de datos PrestaShop: la limpieza inicial
La primera gran victoria en rendimiento viene de limpiar la suciedad acumulada. PrestaShop guarda mucha información temporal que ya no sirve para nada.
1. Limpia las tablas de sesiones obsoletas
Cada visitante que entra en tu tienda genera una fila en la tabla ps_connections y ps_guest. Si tienes mucho tráfico, estas tablas crecen rápidamente. Las sesiones antiguas ya no sirven y solo ralentizan las consultas.
Ejecuta este comando SQL desde phpMyAdmin o la línea de comandos de tu hosting:
DELETE FROM ps_connections WHERE date_add < DATE_SUB(NOW(), INTERVAL 30 DAY);
DELETE FROM ps_guest WHERE id_guest NOT IN (SELECT id_guest FROM ps_connections);
Ajusta el intervalo según el tráfico. Para tiendas pequeñas, 15 días es suficiente. Para tiendas grandes, 7 días.
2. Vacía la tabla de búsquedas antiguas
PrestaShop guarda un histórico de búsquedas de los clientes en ps_search_word y ps_search_index. Con el tiempo, esto puede sumar cientos de miles de filas. Puedes limpiar las búsquedas más antiguas que 30 días:
DELETE FROM ps_search_word WHERE id_product IN (SELECT id_product FROM ps_product WHERE active = 0);
DELETE FROM ps_search_index WHERE id_product NOT IN (SELECT id_product FROM ps_product);
También puedes reindexar el buscador desde el panel de administración de PrestaShop (menú Parámetros avanzados > Rendimiento > Buscar). Esto reconstruye el índice de forma limpia.
3. Elimina los logs y mensajes antiguos
Las tablas ps_log y ps_messages acumulan errores y mensajes internos. No los necesitas para siempre. Borra los que tengan más de 15 días:
DELETE FROM ps_log WHERE date_add < DATE_SUB(NOW(), INTERVAL 15 DAY);
DELETE FROM ps_messages WHERE date_add < DATE_SUB(NOW(), INTERVAL 30 DAY);
4. Limpia los carritos abandonados y antiguos
Los carritos sin completar llenan la tabla ps_cart. Si un carrito tiene más de 30 días y no se ha convertido en pedido, es basura. Elimínalos:
DELETE FROM ps_cart WHERE date_add < DATE_SUB(NOW(), INTERVAL 30 DAY) AND id_cart NOT IN (SELECT id_cart FROM ps_orders);
Optimización de tablas: el mantenimiento clave
Una vez limpias las tablas, toca optimizarlas físicamente. Cuando borras datos, los archivos de la base de datos quedan fragmentados. La optimización reorganiza el espacio y mejora la velocidad de lectura.
Usa el comando OPTIMIZE TABLE
Este comando compacta las tablas y actualiza las estadísticas que MySQL usa para planificar consultas. Puedes optimizar todas las tablas de una vez con este script:
SELECT CONCAT('OPTIMIZE TABLE ', table_name, ';')
FROM information_schema.tables
WHERE table_schema = 'tu_base_de_datos';
Copia los resultados y ejecútalos. O más fácil, en phpMyAdmin selecciona todas las tablas y en el menú desplegable elige "Optimizar tablas".
[TIP] Haz esta optimización al menos una vez al mes. Es una operación segura y no bloquea la tienda durante mucho tiempo.
Convierte las tablas a InnoDB
Si tu PrestaShop usa tablas MyISAM (típico en instalaciones antiguas), considera convertirlas a InnoDB. InnoDB ofrece mejor rendimiento en consultas complejas y bloqueo por fila en lugar de bloqueo por tabla. Ejecuta:
ALTER TABLE ps_product ENGINE=InnoDB;
Repite para las tablas más grandes: ps_orders, ps_order_detail, ps_cart, ps_product_attribute.
PrestaShop MySQL: ajustes de configuración del servidor
Muchas veces el problema no está en los datos sino en la configuración del servidor MySQL. Si tienes acceso al archivo my.cnf (o my.ini en Windows), ajusta estos parámetros:
1. Aumenta el buffer de consultas
El query_cache_size guarda en memoria los resultados de consultas repetidas. Si tu tienda recibe muchas visitas a las mismas páginas, esto es oro puro. Un valor razonable para una tienda pequeña es 64MB; para tiendas grandes, 128MB.
query_cache_type = 1
query_cache_size = 64M
2. Ajusta el tamaño del buffer de InnoDB
El innodb_buffer_pool_size es la memoria que MySQL usa para cachear datos e índices. Debería ocupar entre el 60% y el 70% de la memoria RAM total del servidor. Si tienes 4GB de RAM, pon 2.5GB.
innodb_buffer_pool_size = 2G
3. Configura el límite de conexiones
Si tu tienda recibe picos de tráfico, aumenta max_connections para evitar errores de "demasiadas conexiones". Pon un valor seguro como 200 o 300.
max_connections = 300
[INFO] Si no sabes dónde está el archivo de configuración, en Syspanel puedes pedir ayuda al soporte del hosting. Ellos pueden ajustar estos valores por ti si no tienes acceso directo.
Optimización de consultas SQL específicas de PrestaShop
Ahora pasamos a la parte más técnica: mejorar las consultas que PrestaShop ejecuta constantemente. Algunas consultas son ineficientes por diseño, pero puedes corregirlas.
1. Revisa y crea índices en las tablas más usadas
Los índices son como el índice de un libro: aceleran la búsqueda de datos. PrestaShop ya crea algunos, pero no siempre son los óptimos. Estas son las tablas y campos donde más necesitas índices:
ps_product: índice enid_category_default,active,date_add.ps_product_attribute: índice enid_product,default_on.ps_stock_available: índice enid_product,id_product_attribute.ps_orders: índice endate_add,current_state,id_customer.ps_order_detail: índice enid_order,id_product.
Puedes crear un índice compuesto con:
CREATE INDEX idx_product_active_date ON ps_product (active, date_add);
2. Optimiza la consulta del bloque de productos destacados
El módulo de productos destacados hace una consulta que a veces es lenta. La consulta típica es:
SELECT p.* FROM ps_product p
WHERE p.active = 1 AND p.id_category_default IN (SELECT id_category FROM ps_category_product WHERE id_product = p.id_product)
Puedes optimizarla usando un JOIN más eficiente y limitando el número de resultados:
SELECT p.* FROM ps_product p
INNER JOIN ps_category_product cp ON cp.id_product = p.id_product
WHERE p.active = 1
GROUP BY p.id_product
LIMIT 8;
3. Evita los SELECT * en módulos personalizados
Si tienes módulos personalizados o modificados, revisa que no hagan consultas con SELECT *. Esto trae todas las columnas, incluso las que no necesitas. Cambia a seleccionar solo los campos requeridos. Por ejemplo:
-- Mal
SELECT * FROM ps_product WHERE id_product = 1;
-- Bien
SELECT id_product, name, price, quantity FROM ps_product WHERE id_product = 1;
4. Limita el uso de OR en las consultas
Las consultas con muchos OR son lentas porque MySQL no puede usar índices eficientemente. Sustituye por IN o UNION. Por ejemplo:
-- Mal
SELECT * FROM ps_product WHERE price < 10 OR price > 100;
-- Bien
SELECT * FROM ps_product WHERE price IN (SELECT price FROM ps_product WHERE price < 10 OR price > 100);
Uso de herramientas de monitorización
No puedes optimizar lo que no mides. Activa el slow query log de MySQL para ver qué consultas tardan más de 2 segundos:
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
Luego revisa ese archivo y verás exactamente qué consultas están ralentizando tu PrestaShop MySQL. Podrás atacarlas una a una.
Otra herramienta útil es phpMyAdmin (incluido en Syspanel). En la pestaña "Estado" verás estadísticas de rendimiento como el porcentaje de cache hits. Si el valor de query cache hit rate es menor del 80%, significa que el caché de consultas está mal configurado.
[TIP] Si no quieres complicarte con SQL, instala el módulo "MySQL Performance" de PrestaShop Addons. Analiza automáticamente tu base de datos y te da recomendaciones personalizadas.
Mantenimiento programado: la clave para el rendimiento a largo plazo
La optimización no es un evento único. Debes programar tareas de mantenimiento periódicas para que tu base de datos PrestaShop se mantenga siempre ligera.
Crea un cron de limpieza mensual
En tu cron de servidor (o en Syspanel), añade una tarea mensual que ejecute estos comandos:
mysql -u usuario -pclave -e "DELETE FROM ps_connections WHERE date_add < DATE_SUB(NOW(), INTERVAL 30 DAY);"
mysql -u usuario -pclave -e "OPTIMIZE TABLE ps_product, ps_orders, ps_cart;"
Activa el modo mantenimiento semanal
Una vez a la semana, pon tu tienda en modo mantenimiento durante 10 minutos (por ejemplo, a las 5 de la mañana) y ejecuta la optimización completa de tablas. Esto evita que el proceso interfiera con clientes reales.
Revisa el tamaño de la base de datos
Cada mes, comprueba el tamaño de tu base de datos. Si crece más de un 10% sin que aumenten tus productos o pedidos, algo está mal. Investiga qué tabla crece más rápido y limpia esa área.
Errores comunes al optimizar y cómo evitarlos
1. Borrar datos de tablas que PrestaShop necesita
Algunas tablas parecen basura pero son esenciales, como ps_currency, ps_country o ps_lang. Nunca borres filas de estas tablas sin saber exactamente qué son. Cuando dudes, consulta antes.
2. Optimizar en horas de mucho tráfico
La optimización de tablas bloquea temporalmente las escrituras. Si lo haces en plena campaña de ventas, los clientes verán errores. Programa siempre el mantenimiento en horas de baja afluencia.
3. No probar los cambios en un entorno de pruebas
Antes de aplicar cambios masivos en producción, prueba en una copia local o en un subdominio de pruebas. Así evitarás sorpresas desagradables.
Preguntas frecuentes sobre optimización de base de datos en PrestaShop
¿Cada cuánto debo optimizar mi base de datos?
Para una tienda pequeña, una vez al mes es suficiente. Para tiendas con mucho tráfico (más de 10,000 visitas al mes), hazlo cada semana. La limpieza de sesiones y logs puede ser semanal; la optimización física de tablas, mensual.
¿Es seguro ejecutar comandos SQL directamente?
Sí, si tienes una copia de seguridad reciente y sabes lo que haces. Los comandos de borrado con condiciones claras son seguros. Evita los DELETE FROM sin WHERE, eso borraría toda la tabla.
¿Puedo optimizar sin acceso a línea de comandos?
Sí. Usa phpMyAdmin (disponible en Syspanel). Selecciona las tablas y usa las opciones de "Optimizar" y "Vaciar". También puedes ejecutar consultas SQL desde la pestaña "SQL".
¿Qué tamaño debería tener mi base de datos?
Una tienda con 1000 productos debería tener una base de datos de menos de 100MB. Si supera los 200MB, tienes un problema de acumulación de datos basura.
¿La optimización de MySQL mejora mi SEO?
Sí. Google penaliza las páginas que tardan más de 3 segundos en cargar. Al optimizar tu base de datos PrestaShop, la velocidad de carga mejora notablemente, lo que reduce la tasa de rebote y mejora tu posicionamiento en los resultados de búsqueda.
Resumen: tu plan de acción para mejorar el rendimiento PrestaShop
Para que no te pierdas, aquí tienes el plan completo en 6 pasos:
- Haz una copia de seguridad completa de tu base de datos.
- Limpia la basura: sesiones, logs, búsquedas antiguas y carritos abandonados.
- Optimiza las tablas con
OPTIMIZE TABLEo desde phpMyAdmin. - Ajusta la configuración del servidor MySQL (buffers y caché).
- Crea índices en las tablas más consultadas.
- Programa un mantenimiento mensual automático.
Con estos pasos, tu tienda PrestaShop MySQL volverá a volar. Los clientes notarán la diferencia en la velocidad de carga y, con ello, la tasa de conversión subirá. Recuerda que la optimización es un proceso continuo, no un parche puntual. Dedica un par de horas al mes a este mantenimiento y tu negocio online te lo agradecerá.
