Cómo optimizar el rendimiento de MySQL en PrestaShop (índices, caché y consultas)
¿Por qué tu PrestaShop va lento? El problema suele estar en la base de datos
Si tienes una tienda online con PrestaShop, seguramente has notado que, a medida que añades productos, clientes y pedidos, la velocidad de carga empeora. El culpable más habitual no es tu hosting, sino la base de datos MySQL. Optimizar MySQL en PrestaShop es una de las tareas más efectivas que puedes hacer para recuperar la velocidad sin cambiar de servidor.
Piensa en tu base de datos como un almacén gigante. Si los productos están tirados por el suelo, encontrar algo lleva mucho tiempo. Pero si tienes estanterías ordenadas (índices), un carrito eficiente (caché) y sabes exactamente qué buscar (consultas optimizadas), todo va mucho más rápido.
En esta guía extensa y práctica, vamos a desgranar, paso a paso, cómo mejorar el rendimiento base de datos PrestaShop. No necesitas ser un experto en informática, solo seguir las instrucciones con calma.
1. Diagnóstico inicial: ¿Realmente es MySQL el problema?
Antes de tocar nada, debemos confirmar que el cuello de botella es la base de datos. No queremos que pierdas tiempo configurando cosas que no necesitas.
1.1. Activa el modo depurador de PrestaShop
PrestaShop tiene un modo de depuración que te muestra el tiempo de carga de cada consulta SQL. Para activarlo:
- Abre el archivo
config/defines.inc.phpde tu instalación. - Busca la línea que dice
define('_PS_DEBUG_SQL_', false);. - Cámbiala a
define('_PS_DEBUG_SQL_', true);. - Guarda el archivo y recarga tu tienda.
Ahora verás, al final de cada página, una lista de consultas con su tiempo de ejecución. Si ves consultas que tardan más de 0.1 segundos, el problema es claro: PrestaShop MySQL lento.
1.2. Usa la herramienta de rendimiento de Syspanel
Si tu hosting utiliza el panel Syspanel (recuerda que el acceso es a través del puerto 2106), tienes una ventaja. Dentro de la sección de bases de datos, encontrarás un apartado llamado "Rendimiento" o "Estado de MySQL". Te mostrará métricas como el número de conexiones, el tiempo de ejecución medio y si hay consultas en cola.
[INFO] Si no tienes acceso a Syspanel o a phpMyAdmin, pide a tu proveedor de hosting un informe de "Slow Query Log". Son las consultas que más tiempo consumen.
2. Índices MySQL PrestaShop: El orden en el almacén
Los índices MySQL PrestaShop son la herramienta más poderosa y, a la vez, la más ignorada. Un índice es como el índice de un libro: te dice en qué página está el capítulo sin tener que leer todo el libro.
2.1. ¿Cómo saber qué índices te faltan?
PrestaShop viene con índices por defecto, pero con el tiempo y las modificaciones, se pierden o no se crean los necesarios. Para encontrarlos:
- Entra en phpMyAdmin (o la herramienta de bases de datos de Syspanel).
- Selecciona tu base de datos de PrestaShop.
- Ve a la pestaña "SQL" y ejecuta esta consulta:
SHOW INDEX FROM ps_orders; - Repite con tablas como
ps_cart,ps_product,ps_category_productyps_stock_available.
Fíjate en la columna Key_name. Si ves que la columna id_product no tiene un índice llamado algo como idx_id_product, es que falta.
2.2. Crear un índice paso a paso (ejemplo práctico)
Imagina que tu tienda va lenta al buscar por categoría. La tabla que relaciona productos y categorías es ps_category_product. Para añadir un índice compuesto:
ALTER TABLE ps_category_product ADD INDEX idx_category_product (id_category, id_product);
Este comando crea un índice que acelera la búsqueda de productos dentro de una categoría. Es como ponerle una etiqueta a cada caja del almacén con su contenido.
2.3. Índices recomendados para PrestaShop
No crees índices a lo loco, ya que ralentizan la escritura. Aquí tienes una lista segura:
- Tabla
ps_orders: Índice enid_customerydate_add. - Tabla
ps_product: Índice enactiveyid_category_default. - Tabla
ps_cart: Índice enid_customerydate_upd. - Tabla
ps_search_index: Índice enid_productyweight.
[WARNING] Antes de ejecutar cualquier
ALTER TABLE, haz una copia de seguridad de la base de datos. Un error en un índice puede romper una consulta. Siempre trabaja con un duplicado si es posible.
3. Caché: El carrito que te ahorra viajes
La caché no es magia, es memoria. Guarda resultados de consultas para no tener que ir a MySQL cada vez que un usuario visita una página. Es una de las mejoras más notables para el rendimiento base de datos PrestaShop.
3.1. Activar la caché de PrestaShop (Back Office)
PrestaShop incluye un sistema de caché integrado. Para activarlo:
- Ve a Parámetros avanzados > Rendimiento.
- En "Caché", selecciona "Usar caché de archivos" (si tu hosting es básico) o "Usar caché de Memcached" (si tienes un VPS o servidor dedicado).
- Guarda los cambios.
Con la caché de archivos, PrestaShop crea archivos temporales con las consultas ya resueltas. Con Memcached, usa la RAM del servidor, que es mucho más rápida.
3.2. Caché de MySQL: Query Cache
MySQL tiene su propio caché de consultas. En servidores antiguos, está desactivado. Para activarlo, necesitas acceso a la configuración de MySQL (my.cnf o my.ini).
Añade estas líneas:
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 2M
[TIP] Si usas Syspanel, en la sección de MySQL puedes ajustar estos parámetros sin tocar archivos de configuración. Busca "Variables" y modifica
query_cache_size. Recuerda que el puerto de acceso es el 2106.
3.3. Caché de aplicaciones: OPCache
OPCache no es de MySQL, pero está relacionado con el rendimiento general. Almacena el código PHP compilado. Si no lo tienes activado, el servidor tiene que "traducir" el PHP cada vez.
En tu archivo php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
4. Optimización de consultas SQL: Habla el idioma de MySQL
A veces, PrestaShop genera consultas ineficientes. No podemos cambiar el código fuente (y no deberíamos), pero sí podemos optimizar cómo se ejecutan.
4.1. Utiliza el "EXPLAIN" para entender qué hace MySQL
Cuando ejecutes una consulta lenta en phpMyAdmin, pon delante la palabra EXPLAIN. Ejemplo:
EXPLAIN SELECT * FROM ps_orders WHERE id_customer = 10;
Te mostrará una tabla con columnas como type y rows. Si en type ves ALL, significa que MySQL está recorriendo toda la tabla. Si ves ref o const, está usando un índice. El objetivo es que nunca veas ALL.
4.2. Evita el uso excesivo de "LIKE"
Las búsquedas con LIKE '%texto%' son lentas porque no pueden usar índices. PrestaShop usa esto en su buscador interno. Si tu tienda es grande, considera usar un buscador externo como Elasticsearch o el módulo de búsqueda avanzada de PrestaShop.
4.3. Limpia consultas huérfanas
Con el tiempo, se acumulan registros en tablas como ps_sessions, ps_connections o ps_guest. Estas tablas crecen sin control. Puedes vaciarlas con:
TRUNCATE TABLE ps_connections;
TRUNCATE TABLE ps_sessions;
TRUNCATE TABLE ps_guest;
[WARNING] Esta acción deslogueará a todos los usuarios de tu tienda. Hazlo en horas de bajo tráfico. No borres
ps_customernips_orders, solo las tablas de sesiones y conexiones temporales.
5. Mantenimiento regular: La higiene de tu base de datos
Una base de datos sin mantenimiento es como un coche sin revisiones. Acabará fallando. Establece una rutina mensual.
5.1. Optimizar tablas (phpMyAdmin)
En phpMyAdmin, selecciona todas las tablas de tu base de datos y en el menú desplegable elige "Optimizar tabla". Esto reorganiza los datos y libera espacio. Es la operación más segura que puedes hacer.
5.2. Usar el cron de PrestaShop
PrestaShop tiene tareas programadas que limpian cachés antiguas. Asegúrate de que el cron se ejecuta correctamente. En Syspanel, busca "Cron Jobs" y añade una tarea que ejecute /cron.php?token=TU_TOKEN (lo encontrarás en Parámetros avanzados > Cron).
5.3. Revisa el tamaño de las tablas
Ejecuta esta consulta para ver qué tablas ocupan más:
SELECT table_name, ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)" FROM information_schema.tables WHERE table_schema = "TU_BASE_DE_DATOS" ORDER BY (data_length + index_length) DESC LIMIT 10;
Si ps_log o ps_search_word son enormes, es señal de que algo no va bien. Puedes vaciar ps_log si no necesitas el historial de errores.
6. Configuración avanzada de MySQL para PrestaShop
Si tu hosting te lo permite (VPS o dedicado), ajusta estos parámetros en my.cnf. Son la clave para un rendimiento base de datos PrestaShop profesional.
6.1. Buffer Pool (InnoDB)
InnoDB es el motor de almacenamiento por defecto. Ajusta el tamaño del buffer pool a un 70% de tu RAM disponible.
innodb_buffer_pool_size = 2G
6.2. Tamaño de conexiones
PrestaShop usa muchas conexiones concurrentes. Aumenta el límite:
max_connections = 200
6.3. Tablas temporales
Si tienes consultas que crean tablas temporales grandes, aumenta el tamaño máximo:
tmp_table_size = 64M
max_heap_table_size = 64M
[INFO] Si no sabes cuánta RAM tienes, ejecuta
free -men la terminal. No asignes más memoria de la que tienes o el servidor se bloqueará.
7. Preguntas frecuentes (FAQ) sobre MySQL y PrestaShop
Aquí resolvemos las dudas más comunes que recibimos en soporte.
7.1. ¿Es normal que PrestaShop tenga 500 tablas en la base de datos?
Sí, es completamente normal. PrestaShop es modular y cada módulo añade sus propias tablas. Lo importante no es el número, sino el tamaño y si están indexadas.
7.2. ¿Por qué mi PrestaShop MySQL lento solo en el panel de administración?
El back office hace muchas más consultas que el front office. Si solo va lento ahí, probablemente sea un problema de caché. Activa la caché de archivos y limpia la caché de Smarty en Parámetros avanzados > Rendimiento.
7.3. ¿Puedo usar MariaDB en lugar de MySQL?
Sí, y de hecho es recomendable. MariaDB es un fork de MySQL con mejor rendimiento. Si tu hosting lo ofrece, úsalo. La configuración es prácticamente la misma.
7.4. ¿Cada cuánto tiempo debo optimizar las tablas?
Una vez al mes es suficiente para tiendas pequeñas. Si tienes más de 10,000 visitas diarias, hazlo cada semana.
7.5. ¿Qué hago si después de todo sigue lento?
Entonces el problema puede ser el hosting. Si tu servidor tiene poca RAM o un disco duro mecánico (HDD), ninguna optimización te salvará. Considera migrar a un SSD o a un servicio de hosting gestionado con Syspanel.
8. Resumen final y checklist
Optimizar MySQL en PrestaShop no es un lujo, es una necesidad para cualquier tienda que quiera vender. No se trata de hacer todo a la vez, sino de aplicar estas mejoras de forma progresiva.
Aquí tienes tu checklist para no olvidarte de nada:
- Activé el modo depurador y confirmé que el problema es MySQL.
- Revisé y añadí índices MySQL PrestaShop en tablas clave.
- Activé la caché de PrestaShop (archivos o Memcached).
- Configuré el Query Cache de MySQL.
- Activé OPCache para PHP.
- Ejecuté un
EXPLAINen las consultas lentas. - Limpié tablas de sesiones y logs.
- Programé un cron de mantenimiento.
- Ajusté los parámetros de InnoDB y conexiones.
[TIP] Guarda esta guía. Cada 3 meses, repite el proceso de diagnóstico y limpieza. La prevención es la mejor cura contra un PrestaShop MySQL lento.
Con estos pasos, tu tienda volverá a volar. Y si tienes dudas, recuerda que Syspanel (puerto 2106) tiene herramientas de monitorización integradas que te facilitarán la vida. ¡Manos a la obra!
