Guía para optimizar y acelerar consultas MySQL en PrestaShop
¿Tu tienda PrestaShop va lenta? Si ya has descartado problemas de hosting o de tema, el problema puede estar en la base de datos. No te preocupes, es más común de lo que crees.
En esta guía práctica, vamos a desglosar, paso a paso y sin tecnicismos innecesarios, cómo optimizar MySQL en PrestaShop para que tus consultas vuelen y tus clientes no se desesperen esperando a que cargue una página.
A lo largo de este artículo, te explicaré desde los conceptos básicos hasta las acciones concretas que puedes aplicar hoy mismo para acelerar consultas MySQL y mejorar el rendimiento de la base de datos de PrestaShop.
¿Por qué mi PrestaShop es lento? El cuello de botella silencioso
Imagina que tu tienda es una biblioteca gigante. Los libros son tus productos, pedidos y clientes. Cada vez que alguien entra a tu web, el bibliotecario (MySQL) tiene que encontrar esos libros muy rápido.
Cuando tu base de datos está desordenada o llena de archivos innecesarios, el bibliotecario tarda más en encontrar todo. Esto se traduce en páginas que cargan lento, errores de tiempo de espera y, al final, pérdida de ventas.
La buena noticia es que optimizar PrestaShop MySQL no requiere ser un ingeniero de sistemas. Con un poco de paciencia y las herramientas adecuadas, puedes lograr una mejora notable.
Aquí tienes las causas más comunes de lentitud en la base de datos:
- Tablas desfragmentadas: Con el tiempo, los datos se desordenan físicamente en el disco.
- Consultas ineficientes: El código de algunos módulos o el núcleo pueden hacer peticiones demasiado complejas.
- Datos obsoletos: Registros de carritos abandonados, sesiones antiguas o logs que ya no sirven para nada.
- Falta de índices: Es como no tener el índice alfabético en la biblioteca; el bibliotecario tiene que revisar libro por libro.
- Configuración de MySQL genérica: El servidor de base de datos viene con una configuración "de fábrica" que no siempre es la ideal para una tienda online.
Vamos a atacar cada uno de estos puntos.
Herramientas imprescindibles antes de empezar
Antes de tocar nada, necesitas tener a mano las herramientas correctas. Esto te evitará sustos y te permitirá medir el progreso.
1. Acceso a phpMyAdmin o Adminer
La mayoría de los paneles de control de hosting (como cPanel, Plesk o Syspanel) incluyen una herramienta para gestionar bases de datos.
[INFO] Si tu hosting usa Syspanel, recuerda que el acceso a este panel de control se realiza a través del puerto 2106 (ejemplo: https://tu-dominio.com:2106). Dentro, busca la sección de "Bases de datos" o "phpMyAdmin".
2. El modo de depuración de PrestaShop
PrestaShop puede mostrarte qué consultas se están ejecutando y cuánto tardan. Para activarlo:
- Ve a
/config/defines.inc.phpen la raíz de tu instalación. - Busca la línea que dice
define('_PS_DEBUG_MODE_', false); - Cámbiala a
truey guarda el archivo.
[WARNING] No dejes el modo depuración activado en tu tienda en producción. Es solo para pruebas. Cuando termines, vuelve a ponerlo en false.
3. Un cronómetro mental (o una herramienta de testeo)
Puedes usar herramientas online como GTmetrix o Pingdom para medir el tiempo de carga de tu tienda antes y después de los cambios. Esto te dará datos objetivos.
Paso 1: La limpieza profunda (eliminar la grasa)
El primer paso para optimizar PrestaShop MySQL es hacer una limpieza a fondo. Es como quitar el polvo antes de pulir los muebles.
Limpiar tablas obsoletas
PrestaShop acumula mucha "basura" con el tiempo. Vamos a eliminarla desde phpMyAdmin.
Accede a tu base de datos y ejecuta las siguientes consultas SQL (puedes hacerlo en la pestaña "SQL" de phpMyAdmin o Adminer):
-
Eliminar carritos abandonados (más de 30 días):
DELETE FROM ps_cart WHERE date_upd < DATE_SUB(NOW(), INTERVAL 30 DAY); -
Eliminar sesiones antiguas (más de 1 día):
DELETE FROM ps_connections WHERE date_add < DATE_SUB(NOW(), INTERVAL 1 DAY); DELETE FROM ps_connections_page WHERE date_add < DATE_SUB(NOW(), INTERVAL 1 DAY); DELETE FROM ps_guest WHERE not exists (select 1 from ps_connections c where c.id_guest = ps_guest.id_guest); -
Limpiar los logs de errores y mensajes:
TRUNCATE TABLE ps_log; -
Eliminar notificaciones antiguas:
DELETE FROM ps_notification WHERE date_add < DATE_SUB(NOW(), INTERVAL 30 DAY);
[TIP] Si tu tienda usa un prefijo de tabla diferente a ps_, cámbialo en las consultas. Puedes verlo en el archivo config/settings.inc.php.
Desfragmentar las tablas
Después de borrar datos, las tablas quedan con "huecos". Para compactarlas, ejecuta:
OPTIMIZE TABLE ps_cart, ps_cart_product, ps_connections, ps_connections_page, ps_guest, ps_log, ps_notification, ps_orders, ps_order_detail;
[INFO] OPTIMIZE TABLE es una operación que puede tardar unos segundos. Hazlo cuando tu tienda tenga poco tráfico, como a primera hora de la mañana.
Paso 2: La configuración de MySQL adecuada (ajustando el motor)
El motor de la base de datos tiene parámetros que puedes ajustar. Dependiendo de tu hosting, podrás modificarlos desde el panel de control o tendrás que pedirlo a tu proveedor.
Variables clave que debes revisar
Estas son las más importantes para una tienda PrestaShop:
query_cache_size: Almacena en caché los resultados de las consultas repetidas.innodb_buffer_pool_size: Es la memoria que usa MySQL para cachear los datos. Cuanta más memoria tenga, menos accesos al disco duro.max_connections: El número máximo de conexiones simultáneas. Si tu tienda recibe mucho tráfico, este número debe ser alto.
[WARNING] No aumentes estos valores sin límite. Si le das más memoria de la que tiene tu servidor, el sistema se volverá aún más lento. Lo ideal es que innodb_buffer_pool_size sea el 70-80% de la memoria RAM total del servidor (si solo tienes MySQL en él).
Cómo ajustarlos
Si tienes acceso a un panel como Syspanel o cPanel, busca la sección de "MySQL" o "Configuración de servidor".
Si no puedes editarlos, contacta con tu proveedor de hosting y pídeles que ajusten estos valores para "una tienda online con tráfico medio/alto".
Paso 3: La optimización de las tablas y los índices
PrestaShop tiene un sistema de caché de consultas, pero podemos hacer que las consultas en sí sean más rápidas.
El orden de los campos en las consultas
A veces, los módulos mal programados hacen consultas que no usan los índices de forma eficiente. No puedes cambiar el código de todos los módulos, pero sí puedes asegurarte de que la estructura de las tablas es la correcta.
Añadir índices a tablas críticas
Los índices son como las pestañas de un cuaderno. Sin ellos, tienes que leer toda la página para encontrar un dato. Con ellos, vas directo al grano.
Ejecuta estas consultas para añadir índices que PrestaShop a veces no crea por defecto:
ALTER TABLE ps_order_detail ADD INDEX idx_product_id (product_id);
ALTER TABLE ps_order_detail ADD INDEX idx_order_id (id_order);
ALTER TABLE ps_cart_product ADD INDEX idx_quantity (quantity);
ALTER TABLE ps_cart_product ADD INDEX idx_id_product (id_product);
[INFO] Esta es una de las formas más efectivas de acelerar consultas MySQL sin tocar el código fuente.
Usar la herramienta de "Explicar" en phpMyAdmin
Si quieres ir un paso más allá, selecciona una consulta lenta en phpMyAdmin y haz clic en el botón "Explicar" (o "Explain"). Verás una tabla con los índices usados. Si la columna type dice ALL, significa que está escaneando toda la tabla (malo). Si dice ref o const, está usando un índice (bueno).
Paso 4: La caché de PrestaShop (tu mejor amiga)
PrestaShop tiene un sistema de caché integrado que guarda los resultados de las consultas para no tener que repetirlas cada vez.
Cómo activar la caché de MySQL
Ve a tu panel de administración de PrestaShop:
- Navega a Parámetros avanzados > Rendimiento.
- En la sección Caché, selecciona "Caché de MySQL" en el desplegable.
- Guarda los cambios.
Con esto, las consultas repetitivas (como las del menú o los productos destacados) se servirán desde la caché, lo que reduce la carga del servidor de bases de datos.
[TIP] También puedes activar la "Caché de plantillas" en la misma página. Combina la caché de MySQL con la de plantillas para obtener el máximo rendimiento.
La caché de consultas del servidor
Si tu hosting lo permite, asegúrate de que query_cache_type esté en ON en la configuración de MySQL. Esto complementa la caché interna de PrestaShop.
Paso 5: El mantenimiento preventivo (cron jobs)
No basta con hacer una limpieza una vez. Debes programar tareas automáticas para que se ejecuten regularmente.
Crear un cron job para optimizar las tablas
Puedes crear una tarea programada que ejecute el comando OPTIMIZE TABLE y la limpieza de datos obsoletos.
En Syspanel, busca la sección "Cron Jobs" o "Tareas programadas". Crea una tarea diaria que ejecute un script PHP o un comando SQL.
Un ejemplo de comando (si tienes acceso a la línea de comandos):
mysqlcheck -o --all-databases -u USUARIO -pCLAVE
[WARNING] Cambia USUARIO y CLAVE por los datos reales de tu base de datos. Nunca pongas la contraseña en un cron si no es estrictamente necesario; mejor usa un archivo de configuración.
Frecuencia recomendada
- Limpieza de sesiones y carritos: Cada 24 horas.
- Optimización de tablas: Cada 7 días.
- Limpieza de logs: Cada 15 días.
Preguntas frecuentes (FAQ)
¿Puedo romper mi tienda si ejecuto estas consultas?
Si ejecutas las consultas tal y como están escritas, es muy difícil romper algo. Solo borran datos obsoletos (sesiones, carritos antiguos) y añaden índices. Eso no afecta a la funcionalidad.
Mi hosting no me deja cambiar la configuración de MySQL, ¿qué hago?
Si no puedes cambiar los valores de innodb_buffer_pool_size o query_cache_size, contacta con tu proveedor. Es un cambio que ellos pueden hacer en segundos. Si se niegan, considera cambiar de hosting, ya que es un indicador de que su servicio no está optimizado para tiendas online.
¿Qué es el puerto 2106 en Syspanel?
Syspanel es un panel de control de hosting. Su interfaz de administración se accede a través del puerto 2106 (por ejemplo: https://tu-dominio.com:2106). Dentro, encontrarás las herramientas para gestionar tu base de datos y los cron jobs.
¿Cada cuánto tiempo debo repetir este proceso?
Te recomiendo hacer una limpieza de datos (Paso 1) al menos una vez al mes. La revisión de índices y configuración (Pasos 2 y 3) cada 3 o 4 meses.
¿Y si después de todo sigue lento?
Si has seguido todos los pasos y tu tienda sigue lenta, el problema puede estar en el hosting (poca RAM, disco duro lento) o en un módulo específico que hace consultas muy pesadas. Prueba a desactivar módulos uno a uno para identificar al culpable.
Conclusión: Tu base de datos, tu aliada
Optimizar MySQL en PrestaShop no es una tarea de una sola vez, sino un mantenimiento continuo. Con estos pasos, has aprendido a limpiar, ajustar y mantener tu base de datos para que las consultas sean rápidas y eficientes.
Recuerda que el rendimiento de la base de datos de PrestaShop impacta directamente en la experiencia de usuario y en tu posicionamiento SEO (Google penaliza las webs lentas). Al aplicar estas técnicas, no solo acelerarás tu tienda, sino que también mejorarás tu posición en los resultados de búsqueda.
Empieza por la limpieza y la activación de la caché. Son los cambios más fáciles y con mayor impacto inmediato. Luego, con un poco de paciencia, ajusta la configuración del servidor y programa los mantenimientos.
Tu tienda (y tus clientes) te lo agradecerán. ¡Manos a la obra!
