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

Cómo optimizar y acelerar las consultas de una base de datos en PrestaShop

Actualizado el 16 de octubre de 2025

¿Por qué tu PrestaShop va lento al consultar la base de datos?

Cuando tu tienda PrestaShop empieza a notarse lenta, el problema casi siempre está en la base de datos. No es que tu hosting sea malo, sino que las consultas SQL se están ejecutando de forma ineficiente. Cada vez que un cliente entra a tu tienda, busca un producto o hace un pedido, PrestaShop lanza decenas de consultas a MySQL. Si esas consultas tardan milisegundos de más, se multiplican por cien visitantes y el resultado es una página que tarda 5 segundos en cargar.

La buena noticia es que optimizar base de datos prestashop no requiere ser un ingeniero de sistemas. Con unos ajustes prácticos, puedes reducir el tiempo de respuesta de MySQL hasta en un 70% y hacer que tu tienda vuele. En esta guía te explico paso a paso, sin tecnicismos innecesarios, cómo lograrlo.


Primero: diagnostica el estado actual de tu base de datos

Antes de tocar nada, necesitas saber qué está pasando. No sirve de nada optimizar a ciegas. Entra a tu panel de administración de PrestaShop y ve a Parámetros avanzados > Rendimiento. Ahí verás opciones como "Combinar archivos JavaScript" o "Cache de plantillas", pero eso no es lo que nos interesa ahora.

Lo que necesitas es acceder a phpMyAdmin (la herramienta de gestión de bases de datos que ofrece tu hosting). Normalmente la encuentras en el panel de control de tu hosting. Si usas un panel como Syspanel, entra por el puerto 2106 y busca el acceso a phpMyAdmin dentro de la sección de bases de datos.

Una vez dentro, selecciona la base de datos de tu PrestaShop (suele llamarse algo como prestashop_db). Luego, en la pestaña SQL, ejecuta este comando:

SHOW TABLE STATUS;

Esto te mostrará una tabla con todas las tablas de tu base de datos. Fíjate en dos columnas: Data_length (tamaño de los datos) y Rows (número de filas). Si ves tablas con decenas de miles de filas, como ps_connections o ps_guest, ahí es donde está el problema.

También puedes revisar el slow query log (registro de consultas lentas) si tu hosting lo permite. Pero para empezar, con ver el tamaño de las tablas y la cantidad de filas es suficiente para saber por dónde atacar.


Activa el caché de MySQL (query cache)

El caché de consultas es como una memoria a corto plazo para MySQL. Cuando una consulta se ejecuta, MySQL guarda el resultado en memoria. Si la misma consulta vuelve a aparecer (por ejemplo, cuando otro usuario visita la misma categoría), MySQL responde desde la memoria sin tocar el disco. Esto es acelerar prestashop mysql en su forma más pura.

Para activarlo, ve a tu archivo de configuración de MySQL. En la mayoría de los hostings, puedes hacerlo desde el propio panel. Si tienes acceso por SSH o a través de Syspanel, edita el archivo my.cnf o my.ini y añade estas líneas:

query_cache_type = 1
query_cache_size = 64M
query_cache_limit = 2M
  • query_cache_type: activa el caché (1 = activado).
  • query_cache_size: memoria dedicada al caché. 64MB es un buen punto de partida.
  • query_cache_limit: el tamaño máximo de una consulta que se guarda en caché. 2MB es suficiente.

Después de guardar los cambios, reinicia MySQL. Si no sabes cómo hacerlo, contacta con tu proveedor de hosting o usa el botón de reinicio de servicio en Syspanel.

[TIP] Si tu versión de MySQL es 8.0 o superior, el query cache está obsoleto y desactivado. En ese caso, no pierdas tiempo con esto y pasa a la siguiente sección, que es aún más efectiva.


Crea índices MySQL en las tablas más utilizadas

Los índices mysql prestashop son como el índice de un libro: en vez de leer todas las páginas para encontrar una palabra, vas directo a la página correcta. Sin índices, MySQL tiene que recorrer toda la tabla para encontrar lo que busca. Con miles de filas, eso es lentísimo.

PrestaShop ya viene con algunos índices por defecto, pero no siempre son los adecuados. Las tablas que más sufren son ps_product, ps_category_product, ps_stock_available y ps_orders. Vamos a revisar y añadir índices según lo que tu tienda realmente consulta.

Paso 1: Identifica las consultas lentas

Activa el log de consultas lentas en MySQL. En tu archivo my.cnf añade:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-queries.log
long_query_time = 2

Esto registrará cualquier consulta que tarde más de 2 segundos. Después de unas horas de tráfico normal, revisa ese archivo. Verás consultas como:

SELECT * FROM ps_product WHERE id_category_default = 5 ORDER BY date_add DESC;

Paso 2: Crea el índice adecuado

Una vez que sepas qué consultas se repiten, crea índices para los campos que aparecen en las cláusulas WHERE, ORDER BY y JOIN. Por ejemplo, para la consulta anterior, ejecuta en phpMyAdmin:

CREATE INDEX idx_category_default ON ps_product (id_category_default);

También es muy común que las búsquedas por nombre de producto sean lentas. Para eso, crea un índice de texto completo:

ALTER TABLE ps_product ADD FULLTEXT INDEX idx_product_name (name);

[WARNING] No crees índices en cada campo que se te ocurra. Cada índice ocupa espacio y ralentiza las inserciones y actualizaciones. Céntrate solo en las columnas que aparecen en las consultas frecuentes.

Paso 3: Índices compuestos

Si tus consultas filtran por dos o más campos a la vez, un índice compuesto es más eficiente que varios índices individuales. Por ejemplo, para filtrar por categoría y precio:

CREATE INDEX idx_category_price ON ps_product (id_category_default, price);

Esto hace que MySQL pueda acotar la búsqueda en un solo paso, sin tener que cruzar resultados de dos índices distintos.


Limpia tablas basura que ralentizan tu PrestaShop

PrestaShop acumula datos innecesarios con el tiempo. Tablas como ps_connections (visitas), ps_guest (invitados), ps_log (registros) y ps_searchengines pueden crecer sin control. Cada vez que alguien visita tu tienda, se inserta una fila en estas tablas. A los seis meses, puedes tener cientos de miles de filas inútiles.

Cómo limpiarlas de forma segura

En lugar de borrar filas una a una (que sería lentísimo), usa TRUNCATE para vaciarlas por completo. Pero cuidado: algunas tablas contienen datos que necesitas, como pedidos o clientes. Solo vacía las que son puramente informativas:

TRUNCATE TABLE ps_connections;
TRUNCATE TABLE ps_connections_page;
TRUNCATE TABLE ps_guest;
TRUNCATE TABLE ps_log;
TRUNCATE TABLE ps_searchengines;

[WARNING] Antes de ejecutar TRUNCATE, haz una copia de seguridad. Si tu tienda usa módulos de estadísticas que dependen de esos datos, podrían dejar de funcionar. En ese caso, mejor usa DELETE FROM con un filtro de fecha, por ejemplo: DELETE FROM ps_connections WHERE date_add < NOW() - INTERVAL 90 DAY;

Automatiza la limpieza con un cron

Para que no se te olvide, programa una tarea cron que ejecute estas limpiezas cada mes. En Syspanel puedes crear cron jobs fácilmente. El comando sería algo como:

mysql -u usuario -pcontraseña prestashop_db -e "DELETE FROM ps_connections WHERE date_add < NOW() - INTERVAL 90 DAY;"

Optimiza las tablas con OPTIMIZE TABLE

Después de borrar miles de filas, las tablas quedan fragmentadas. Los datos se dispersan en el disco y MySQL tarda más en leerlos. Para solucionarlo, ejecuta el comando OPTIMIZE TABLE en las tablas que has limpiado o que tienen muchas operaciones de escritura.

OPTIMIZE TABLE ps_product;
OPTIMIZE TABLE ps_category_product;
OPTIMIZE TABLE ps_stock_available;
OPTIMIZE TABLE ps_orders;

Este comando reorganiza los datos y compacta la tabla. Es como desfragmentar un disco duro. No hace falta que lo ejecutes a diario; una vez al mes o después de una limpieza grande es suficiente.

[TIP] Si tu hosting usa MariaDB (la mayoría hoy en día), OPTIMIZE TABLE funciona de maravilla. Pero en tablas InnoDB, a veces es más eficiente usar ALTER TABLE ps_product ENGINE=InnoDB; que hace lo mismo en segundo plano.


Configuración de MySQL para PrestaShop

Además de los índices y la limpieza, hay parámetros de configuración de MySQL que puedes ajustar para acelerar prestashop mysql notablemente. Estos van en el archivo my.cnf:

innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
max_connections = 150
key_buffer_size = 256M
  • innodb_buffer_pool_size: es la memoria que MySQL usa para cachear datos e índices. Ponle el 70% de la RAM disponible de tu servidor. Si tienes 4GB de RAM, ponle 2.5G.
  • innodb_flush_log_at_trx_commit: con valor 2, MySQL escribe los logs cada segundo en lugar de en cada transacción. Esto reduce la carga de disco sin sacrificar demasiada seguridad.
  • key_buffer_size: para tablas MyISAM (si aún tienes alguna). 256MB es un buen valor para tiendas medianas.
  • max_connections: no lo pongas demasiado alto o agotarás la memoria. 150 es razonable para una tienda con tráfico moderado.

[INFO] No todos los hostings te permiten editar estos parámetros. Si tu plan es compartido, probablemente tendrás que contactar con soporte. En un VPS o servidor dedicado, puedes editarlos tú mismo desde Syspanel (puerto 2106) o por SSH.


Activa la caché de PrestaShop a nivel de aplicación

MySQL no es el único cuello de botella. PrestaShop también hace consultas internas que puedes evitar con su sistema de caché. Ve a Parámetros avanzados > Rendimiento y activa:

  • Caché de consultas: selecciona "Memcached" si tu hosting lo tiene, o "Sistema de archivos" como alternativa.
  • Caché de plantillas: ponla en "Recompilar solo si se modifican los archivos".
  • Caché de Smarty: activa "Cache" y pon la duración en segundos (por ejemplo, 3600 para una hora).

Esto no es específicamente una optimización de MySQL, pero reduce la cantidad de consultas que se generan, lo que alivia la carga de la base de datos y hace que la tienda responda más rápido.


Preguntas frecuentes (FAQ)

¿Cuánto tiempo tardaré en notar la mejora?

Depende del estado actual de tu base de datos. Si tenías tablas con cientos de miles de filas y sin índices, notarás la diferencia inmediatamente después de añadir los índices y limpiar. La activación del caché de MySQL también es inmediata. En general, en menos de una hora de trabajo deberías ver una mejora notable en el tiempo de carga.

¿Puedo romper mi tienda si hago algo mal?

Hay riesgo, sobre todo si tocas tablas que no debes o creas índices duplicados. Por eso es fundamental hacer una copia de seguridad completa de la base de datos antes de empezar. Si algo falla, restaura la copia y vuelve a intentarlo con más cuidado. Los comandos SQL que te he dado son seguros si los ejecutas en las tablas correctas.

¿Cada cuánto debo repetir este proceso?

La limpieza de tablas basura debería ser mensual. La revisión de índices, cada tres o seis meses, o cuando instales un módulo nuevo que haga consultas pesadas. La configuración de MySQL solo hay que tocarla cuando cambies de servidor o aumentes el tráfico de forma significativa.

¿Sirve esto para cualquier hosting?

Sí, pero con matices. En un hosting compartido, no podrás editar my.cnf ni crear cron jobs. Aun así, puedes usar phpMyAdmin para crear índices y limpiar tablas. Si tu hosting tiene un panel llamado Syspanel, recuerda que el acceso es por el puerto 2106 y ahí sí podrás gestionar servicios MySQL y crear tareas programadas.

¿Qué hago si después de todo sigue lenta?

Entonces el problema puede no ser la base de datos, sino el servidor web (Apache/Nginx), la falta de memoria RAM o un módulo de PrestaShop mal optimizado. Te recomiendo revisar el tiempo de respuesta del servidor con herramientas como GTmetrix o Pingdom. Si el TTFB (tiempo hasta el primer byte) es alto, el cuello de botella está en otra parte.


Resumen final: tu checklist de optimización

Para que no se te olvide nada, aquí tienes la lista completa de acciones:

  1. Diagnostica con SHOW TABLE STATUS y revisa las tablas más grandes.
  2. Activa el query cache en MySQL (si tu versión lo soporta).
  3. Crea índices en las columnas que aparecen en consultas frecuentes (WHERE, JOIN, ORDER BY).
  4. Limpia tablas basura como ps_connections y ps_guest.
  5. Ejecuta OPTIMIZE TABLE después de la limpieza.
  6. Ajusta los parámetros de MySQL (buffer pool, log file size, etc.).
  7. Activa la caché de PrestaShop a nivel de aplicación.

Con estos siete pasos, tu base de datos estará más ligera, las consultas volarán y tus clientes notarán una tienda mucho más rápida. Y recuerda: la optimización no es un evento único, es un mantenimiento continuo. Programa una revisión mensual y tu PrestaShop se mantendrá en plena forma durante años.

¿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