🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Cómo optimizar el rendimiento de MySQL en PrestaShop (índices y consultas)

Actualizado el 13 de septiembre de 2025

¿Tu tienda PrestaShop va lenta? Si ya has descartado problemas de hosting o de configuración general, es muy probable que el cuello de botella esté en la base de datos. No te preocupes, no necesitas ser un ingeniero de sistemas para mejorar esto. En esta guía te voy a explicar, paso a paso y sin tecnicismos innecesarios, cómo optimizar MySQL en PrestaShop centrándonos en los dos grandes pilares: los índices y las consultas.

Piensa en tu base de datos como en una biblioteca gigante. Sin un buen sistema de organización, encontrar un libro concreto llevaría muchísimo tiempo. Los índices son como las etiquetas y los estantes bien señalizados que permiten encontrar el libro al instante. Las consultas son las preguntas que le haces al bibliotecario; si se las formulas mal, tardará más en responderte.

Vamos a ello. Al final de este artículo, tendrás un plan de acción claro para acelerar tu tienda.

¿Por qué es tan importante optimizar la base de datos?

Antes de meternos en faena, entendamos el "por qué". PrestaShop es un software muy completo que realiza cientos de consultas a la base de datos para cargar una sola página. Cada vez que un cliente visita tu tienda, busca productos, inicia sesión o añade algo al carrito, se ejecutan múltiples comandos SQL.

Si tu base de datos está desordenada, sin índices o con consultas ineficientes, cada una de esas acciones tarda más. El resultado es un tiempo de carga alto, que afecta directamente a la experiencia de usuario y a tu posicionamiento en buscadores (SEO). De hecho, Google penaliza las webs lentas, así que el rendimiento PrestaShop no es solo una cuestión técnica, sino también comercial.


Fase 1: Diagnóstico Inicial (Antes de Tocar Nada)

No empieces a cambiar cosas a lo loco. Primero, necesitas saber qué está fallando. Para ello, activaremos el modo depuración de PrestaShop, que nos mostrará el tiempo de ejecución de las consultas.

Activar el Modo Depuración

  1. Accede a tu panel de administración de PrestaShop.
  2. Ve a Parámetros Avanzados > Rendimiento.
  3. En la sección Depuración, activa la opción "Sí" en "Modo de depuración".
  4. Guarda los cambios.

Ahora, si visitas tu tienda como un cliente normal, verás al final de la página una barra de depuración. Esta barra te muestra información valiosísima: el número de consultas a la base de datos y el tiempo total que tardan en ejecutarse.

[INFO] Anota el número de consultas y el tiempo total. Este será tu punto de partida. Si ves números como "500 consultas en 2 segundos", está claro que hay margen de mejora.

Identificar las Consultas Largas

La barra de depuración de PrestaShop también te permite hacer clic en la pestaña de "Consultas" para ver la lista completa. Busca las que tengan un tiempo de ejecución alto (por ejemplo, más de 50 milisegundos). Anota o copia esas consultas; serán nuestro objetivo principal.

[WARNING] No dejes el modo depuración activado para siempre. Es una herramienta de diagnóstico y ralentiza un poco la tienda. Desactívalo cuando termines de analizar.


Fase 2: Optimizar los Índices de MySQL (La Base de Todo)

Las tablas de PrestaShop crecen muchísimo con el tiempo (pedidos, clientes, visitas). Sin índices, MySQL tiene que escanear toda la tabla (como leer un libro página a página) para encontrar lo que busca. Los índices MySQL crean una estructura de datos separada que permite búsquedas casi instantáneas.

Qué son los índices y cómo funcionan

Un índice es como el índice alfabético al final de un libro. En lugar de leer todo el libro para encontrar "PrestaShop", vas al índice, buscas la letra "P" y te dice directamente en qué página está. En MySQL, un índice se crea sobre una columna (o varias) y acelera las consultas que usan esa columna en sus condiciones (WHERE, JOIN, ORDER BY).

Índices que PrestaShop necesita sí o sí

PrestaShop ya crea algunos índices por defecto, pero con el tiempo y el volumen de datos, es posible que necesitemos añadir más. Aquí tienes los más importantes:

  1. Tabla ps_orders (Pedidos): Asegúrate de que tienes índices en las columnas id_customer, date_add y current_state. Son las que más se usan en consultas de "mis pedidos" y paneles de administración.
  2. Tabla ps_order_detail (Detalle de pedido): Debe tener un índice en id_order y en product_id. Esto acelera enormemente la búsqueda de productos vendidos.
  3. Tabla ps_product (Productos): Los índices en id_category_default, active y date_upd son cruciales para el listado de productos.
  4. Tabla ps_stock_available (Stock): Esta tabla se consulta constantemente. Un índice en id_product y id_product_attribute es imprescindible.
  5. Tabla ps_connections y ps_connections_page (Conexiones): Son tablas que registran las visitas. Crecen muy rápido y suelen ser un gran foco de lentitud. Índices en date_add, id_guest y id_page son vitales.

Cómo añadir un índice (sin romper nada)

[WARNING] Antes de modificar la estructura de tu base de datos, haz una copia de seguridad completa. Este paso es innegociable. Si algo sale mal, podrás restaurar todo.

Para añadir un índice, puedes usar phpMyAdmin, que suele estar en el panel de control de tu hosting (como Syspanel, que encontrarás en el puerto 2106).

  1. Accede a Syspanel (puerto 2106) y abre phpMyAdmin.
  2. Selecciona tu base de datos de PrestaShop.
  3. Haz clic en la tabla que quieras modificar (por ejemplo, ps_orders).
  4. Arriba, verás una pestaña que dice "Estructura". Haz clic en ella.
  5. Verás la lista de columnas. Busca la columna id_customer.
  6. Haz clic en el enlace "Índice" que aparece debajo de "Acciones" para esa columna.
  7. MySQL creará automáticamente un índice llamado id_customer. Repite este proceso para las columnas que te he mencionado.

[INFO] Si tu tabla es enorme (más de 1 millón de filas), la creación del índice puede tardar unos minutos. No interrumpas el proceso.


Fase 3: Optimizar las Consultas (El Arte de Preguntar Bien)

Tener índices es la mitad del trabajo. La otra mitad es asegurarse de que las consultas que envía PrestaShop sean eficientes. Aunque no podemos reescribir el código del núcleo de PrestaShop (y no deberíamos, porque se perdería con las actualizaciones), sí podemos hacer dos cosas muy poderosas: usar la caché de MySQL y limpiar datos obsoletos.

Activar la Caché de Consultas de MySQL

Esta es una de las optimizaciones más fáciles y efectivas. MySQL puede guardar en memoria el resultado de consultas repetitivas. Si 100 usuarios visitan la misma página de producto, la consulta se ejecuta una vez y las otras 99 se sirven desde la caché, reduciendo drásticamente el tiempo de carga.

¿Cómo activarla? Necesitas acceso a la configuración de MySQL. Esto se hace desde el archivo my.cnf o my.ini. Desde Syspanel (puerto 2106), puedes acceder a la terminal o al gestor de archivos para editarlo.

Agrega o modifica estas líneas en la sección [mysqld]:

query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 2M
  • query_cache_type = 1: Activa la caché.
  • query_cache_size = 128M: Reserva 128 MB de memoria para la caché. Puedes ajustarlo según la RAM de tu servidor.
  • query_cache_limit = 2M: No cachea resultados que sean mayores de 2 MB, para no llenar la caché con datos gigantescos.

Después de guardar el archivo, reinicia el servicio de MySQL.

[WARNING] En versiones modernas de MySQL (8.0+), la caché de consultas está obsoleta y eliminada. Si tu hosting usa MySQL 8.0, esta opción no funcionará. En ese caso, la alternativa es asegurarse de que los índices estén perfectos y usar herramientas como ProxySQL, pero eso ya es un nivel más avanzado.

Limpiar Datos Obsoletos (La Limpieza de Primavera)

Con el tiempo, PrestaShop acumula mucha basura que ralentiza las consultas. Es como tener una casa llena de trastos: cuesta más encontrar lo que buscas.

Tablas que debes limpiar:

  1. ps_connections y ps_connections_page: Registros de visitas antiguos.
  2. ps_guest: Datos de invitados que nunca se registraron.
  3. ps_cart y ps_cart_product: Carritos abandonados de hace meses.
  4. ps_sessions: Sesiones de usuarios expiradas.
  5. ps_log: Registros de errores y eventos.

Puedes borrar los datos directamente con una consulta SQL en phpMyAdmin. Por ejemplo, para borrar conexiones de hace más de 30 días:

DELETE FROM ps_connections WHERE date_add < DATE_SUB(NOW(), INTERVAL 30 DAY);

[TIP] Ejecuta estas consultas en horas de bajo tráfico para no bloquear la tienda. Si no te sientes cómodo con SQL, busca módulos de limpieza en el marketplace de PrestaShop que hagan este trabajo automáticamente.


Fase 4: Ajustes Adicionales en PrestaShop

Además de los índices y las consultas, la propia configuración de PrestaShop puede ayudarte a optimizar la base de datos PrestaShop de forma considerable.

Activar la Caché de PrestaShop

PrestaShop tiene su propio sistema de caché que guarda las consultas en memoria (usando Memcached o Redis).

  1. Ve a Parámetros Avanzados > Rendimiento.
  2. En la sección "Caché", activa la opción "Sí".
  3. Elige el sistema de caché. Si tu hosting lo soporta, selecciona "Memcached" o "Redis". Si no, puedes usar "Sistema de archivos" como alternativa.

Combinar y Comprimir Archivos

En la misma página de rendimiento, encontrarás la opción de "Combinar" y "Comprimir" archivos CSS y JavaScript. Esto reduce el número de peticiones HTTP y el peso de las páginas, lo que indirectamente alivia la carga de la base de datos, ya que el servidor web y PHP trabajan menos.


Fase 5: El Mantenimiento Continuo (La Clave del Éxito)

Optimizar no es una tarea de una sola vez. Es un proceso continuo. Te recomiendo establecer una rutina de mantenimiento.

Un Plan de Acción Mensual

  1. Día 1: Desactiva el modo depuración y activa la caché de PrestaShop.
  2. Día 15: Ejecuta las consultas de limpieza de datos obsoletos (borrar conexiones y carritos antiguos).
  3. Día 30: Revisa el tamaño de las tablas en phpMyAdmin. Si alguna crece de forma desproporcionada, investiga por qué.

Usa el Planificador de Tareas

Puedes automatizar la limpieza de datos. En Syspanel (puerto 2106), puedes configurar un cron job que ejecute una consulta SQL a las 3 de la madrugada, cuando no hay usuarios.

[INFO] El mantenimiento regular no solo mantiene la velocidad, sino que también alarga la vida útil de tu servidor y reduce el riesgo de corrupción de datos.


Preguntas Frecuentes (FAQ)

P: ¿Puedo romper mi tienda si añado un índice incorrecto?

R: Es poco probable. Añadir un índice no cambia los datos, solo añade una estructura de búsqueda. Como mucho, no ayudará si no se usa. El riesgo mayor es no hacer copia de seguridad y que algo falle durante el proceso. Siempre haz una copia antes.

P: Mi tabla ps_connections tiene más de 5 millones de filas. ¿Qué hago?

R: Es una tabla muy pesada. Además de añadir índices, deberías considerar particionar la tabla por fecha. Esto es un poco más avanzado, pero puedes buscar guías específicas para particionar tablas en MySQL. Otra opción es usar un módulo que la limpie automáticamente cada semana.

P: ¿La caché de consultas de MySQL es lo mismo que la caché de PrestaShop?

R: No. La caché de MySQL guarda el resultado de las consultas SQL a nivel de servidor de base de datos. La caché de PrestaShop (Memcached/Redis) guarda los resultados a nivel de aplicación. Son complementarias. Activar ambas ofrece el mejor rendimiento.

P: ¿Debo desactivar el modo depuración siempre?

R: Sí, absolutamente. El modo depuración consume muchos recursos y muestra información sensible. Actívalo solo cuando necesites investigar un problema concreto.

P: No tengo acceso a my.cnf. ¿Puedo optimizar MySQL de otra manera?

R: Sí. Si tu hosting no te permite editar la configuración de MySQL, céntrate en lo que sí puedes controlar: los índices, la limpieza de datos y la caché de PrestaShop. Con esto, ya notarás una gran mejora. También puedes pedir a tu proveedor de hosting que lo active por ti.


Conclusión: Tu Plan de Acción Final

Optimizar el rendimiento de tu tienda no es un misterio. Siguiendo estos pasos, en el orden correcto, verás resultados sorprendentes.

  1. Diagnostica: Activa el modo depuración y anota tus métricas.
  2. Indexa: Añade los índices MySQL que te he recomendado a las tablas principales.
  3. Limpia: Elimina los datos obsoletos que solo ralentizan las consultas.
  4. Cachea: Activa la caché de MySQL (si tu versión lo permite) y la caché de PrestaShop con Memcached o Redis.
  5. Mantén: Establece una rutina de limpieza mensual.

No necesitas hacer todo a la vez. Empieza por los índices, que es el cambio más seguro y con mayor impacto. Después, prueba con la limpieza. Verás cómo el tiempo de carga de tus páginas se reduce y, en consecuencia, tu rendimiento PrestaShop mejora, lo que te ayudará a vender más.

Si después de aplicar todo esto sigues teniendo problemas, es posible que necesites revisar la configuración de tu servidor web (Apache/Nginx) o de PHP. Pero eso ya es otra historia. ¡Manos a la obra!

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel