Saltar al contenido
Codifíca.me | Desarrollo web | Programación

Mejorar la velocidad en Opencart

27 enero, 2014
pruebas velocidad

Mejorar la velocidad en Opencart con índices en las tablas

Estas son las pruebas que he realizado con una web desarrollada bajo Opencart,
la idea surge de este hilo del foro oficial de Opencart

En este hilo un desarrollador recomienda crear índices en las tablas para mejorar la velocidad de respuesta del servidor. Es justo lo que vamos a hacer y mediremos los tiempos de respuesta.

La web en la que vamos a hacer las pruebas es una tienda (sex shop) con más de 8000 productos , al tener tantos productos los tiempos de respuesta del servidor eran realmente lentos. Ya sabemos la importancia de tener una web rápida, entre otras cosas mejoraremos la experiencia del usuario y mejoraremos nuestra relación para salir en los resultados de Google (SEO).

Estos son los tiempos de carga de la web antes de realizar los indices en las tablas.

Desde pingdom
pruebas velocidad

Desde Google

velocidad google

 

Desde Gtmetrix
velocidad opencart

Después creamos los siguientes índices en las tablas:

Creamos un indice en la Tabla category campo parent_id
Creamos un indice en la Tabla category_description campo language_id.
Creamos un indice en la Tabla category_path campos path_id y level.
Creamos un indice en la Tabla category_to_store campo store_id.
Creamos un indice en la Tabla manufacturer_to_store campo store_id.
Creamos un indice en la Tabla product campos manufacturer_id, date_added, date_modified.
Creamos un indice en la Tabla product campos model, sku, upc, ean y con tipo FULLTEXT (si el campo es de carácteres no de números).
Creamos un indice en la Tabla product_description campo language_id.
Creamos un indice en la Tabla product_to_category campo category_id.
Creamos un indice en la Tabla product_to_store campo store_id.
Creamos un indice en la Tabla setting campo store_id, serialized.
Creamos un indice en la Tabla url_alias campo query con tipo FULLTEXT.
Creamos un indice en la Tabla zone campo country_id.
Creamos un indice en la Tabla zone campo name y code con tipo FULLTEXT.

Este es el código para crear los indices:

Tenéis que poner como prefijo en las tablas, el prefijo que pusiste al crear la tienda, (no es obligatorio poner un prefijo al crear la tienda , pero en el caso de que lo hayas puesto entonces si lo tienes que poner).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#Tabla category campo parent_id
CREATE INDEX i_parent_id ON category (parent_id);
 
#Tabla category_description campo language_id
CREATE INDEX i_category_description ON category_description (language_id);
 
#Tabla category_path campos path_id y level
CREATE INDEX i_category_path ON category_path (path_id,level);
 
#Tabla category_to_store campo store_id
CREATE INDEX i_category_to_store ON category_to_store (store_id);
 
#Tabla manufacturer_to_store campo store_id
CREATE INDEX i_manufacturer_to_store ON manufacturer_to_store (store_id);
 
#Tabla product campos manufacturer_id, date_added, date_modified
CREATE INDEX i_product ON product (manufacturer_id, date_added, date_modified);
 
#Tabla product campos model, sku, upc, ean,(como veis donde tengais la referencia etc) y con tipo FULLTEXT (si el campo es de caracteres no de números)
CREATE FULLTEXT INDEX i_product_fulltext ON product (model, sku, upc, ean);
 
#Tabla product_description campo language_id
CREATE INDEX i_product_description ON product_description (language_id);
 
#Tabla product_to_category campo category_id
CREATE INDEX i_product_to_category ON product_to_category (category_id);
 
#Tabla product_to_store campo store_id
CREATE INDEX i_product_to_store ON product_to_store (store_id);
 
#Tabla setting campo store_id, serialized
CREATE INDEX i_setting ON setting (store_id, serialized);
 
#Tabla url_alias campo query con tipo FULLTEXT
CREATE FULLTEXT INDEX i_url_alias ON url_alias (query);# 6936 filas afectadas.
 
#Tabla zone campo country_id
CREATE INDEX i_zone ON zone (country_id);
 
#Tabla zone campo name y code con tipo FULLTEXT
CREATE FULLTEXT INDEX i_zone_fulltext ON zone (name,code);

 

Este es el código para dejarlo todo como estaba antes de realizar los indices.
Por si quieres volver a tener la base de datos de tu instalación Opencart exactamente igual que antes de realizar los cambios.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
DROP INDEX i_parent_id ON category;
DROP INDEX i_category_description ON category_description;
DROP INDEX i_category_path ON category_path;
DROP INDEX i_category_to_store ON category_to_store;
DROP INDEX i_manufacturer_to_store ON manufacturer_to_store;
DROP INDEX i_product ON product;
DROP INDEX i_product_fulltext ON product;
DROP INDEX i_product_description ON product_description;
DROP INDEX i_product_to_category ON product_to_category ;
DROP INDEX i_product_to_store ON product_to_store;
DROP INDEX i_setting ON setting;
DROP INDEX i_url_alias ON url_alias;
DROP INDEX i_zone ON zone;
DROP INDEX i_zone_fulltext ON zone;

 

Después de realizar los índices comprobamos que se ha mejorado la velocidad de respuesta del servidor, estas son las imagenes de los medidores de velocidad después de realizar los cambios en la base de datos.

 

Mejorar la velocidad Opencart | Pingdom

 

mejorar velocidad opencart

Mejorar la velocidad Opencart | Google

 

mejorar velocidad

Mejorar la velocidad Opencart | Gtmetrix

 

mejorar opencart tiempo de respuesta

 

De momento pingdom es el que ha registrado una velocidad mucho más rápida después de realizar los cambios en la base de datos.

Descargar la extensión gratuita para Opencart

Ahora bien, cómo veo que es un caso muy común y que hay mucha gente que quiere lanzar el código en su base de datos y no sabe como hacerlo, he hecho un fichero xml, para que lo subas a tu servidor y teniendo instalado vQmod se ejecute y cree los índices en las tablas.

Solo tienes que descargarlo y subirlo el fichero indice.xml a tu servidor a la carpeta vQmod/xml/

¿Cómo se si he creado los indices?

Sencillo, te vas a tu página principal (vale cualquier página en la que se muestre el footer) y abajo del todo en la últimas lineas te pondrá que la instalación de los indices ha sido correcta.

Después de ver que la instalación ha sido correcta puedes (y debes) borrar el fichero que acabas de subir.

Y listo, ya tendrás tus tablas con sus índices creados, ahora podrás ver que las consultas a tu base de datos es bastante más rápida que antes.

Descárgalo gratis a cambio de una acción social!
[sociallocker id=”4346″]
Descargar!!
[/sociallocker]

Entradas relacionadas

Responder a Ber Cancelar la respuesta

Tu dirección de correo electrónico no será publicada.

Comentarios (32)

Hola Estimado, muy agradecido con los detalles mencionados, tengo poco conocimiento sobre base de datos, y antes ya había leído eso como un principal problema, me interesa ponerlo en práctica, pero deseo saber mas detalles sobre en que parte específicamente se hacen esas modificaciones, si es en la base de datos misma usando MySQL o si es en algún archivo del servidor FTP. Te agradecería enormemente me indiques esto ultimo, compartiré mi experiencia. Saludos.

Responder

Hola Mario,
Tienes que lanzar todas las querys en la base de datos.
Es muy sencillito, y si tienes muchos productos notarás un poco el incremento de velocidad.
Si tienes dudas, estoy por aquí.
Ya nos cuentas que tal.

Responder

Hola Ber, Realmente mejoro, gracias al apoyo de un amigo que tiene manejos de sistemas es realmente sencillo, solo en mi caso ingresar al Mysqladmin…. Y en la opcion SQL copiar el codigo que mencionas, pero anteponer algo de acuerdo a la estructura de cada tienda, por ejemplo para el el primer idice sería: CREATE INDEX i_parent_id ON tech_category (parent_id);

tech_category es lo que diferencia a mi tienda, supongo que otros sitios debe ser XXXXX_category de acuerdo a como lo crearon los usuarios el prefix….. darle continuar y listo… Notablemente es cierto que pingdom es donde mas se nota este aspecto de 8 segundos he bajado a menos de 4 en promedio para mi base de datos que tiene mas de 150 tablas, 55000 filas y solo he creado los indices que indicas

Responder

Exacto,
Tienes que poner como prefijo, el prefijo que pusiste al crear la tienda, (no es obligatorio poner un prefijo al poner la tienda , pero en el caso de que lo hayas puesto entonces si lo tienes que poner)

Por lo general es el nombre de la tienda, u oc_ oc (opencart) o algo similar a esto.

Y bueno, lo importante es que se nota la velocidad, sobre todo en tiendas de muchos productos.

Responder

Además yo añadiría comprensión en Gzip, y deshabilitar la cuenta de los productos en las categorias, así como alguna extensión para habilitar la caché.

Saludos 🙂

Responder

Hola me estoy volviendo loco porque no soy capaz de introducir los indices que nos has dejado hay.
Intento y intento pero no simpre me dice que la tabla no existe.
Yo lo que hago es le doy para hacer una consulta y pego el codigo que tu pusistes pero no funciona
Podrias explicarlo para gente novata con la base de datos porfavor gracias por adelantado.

Responder

gracias pero al final ya lo consegui jejejeje

Responder

Hola Xavi,

Tienes que poner como prefijo, el prefijo que pusiste al crear la tienda, (no es obligatorio poner un prefijo al poner la tienda , pero en el caso de que lo hayas puesto entonces si lo tienes que poner) ,

Lo voy a escribir en el artículo para que no os despistéis 🙂

Un saludo

Responder

Hola, desde ahora, AMIGO…

Llevaba tiempo buscando la forma de mejorar el rendimiento del opencart y por fin, algo que funciona.

Muchas gracias de verdad y un cordial saludo.

Responder

Gracias, la verdad que Opencart necesita optimización para que corra en condiciones.
Saludos,

Responder

Añadido:
Descárgalo gratis a cambio de un tweet

Responder

Ante todo muchas gracias por el aporte. Tengo muchos problemas con el opencart instalado en universionplus.com.ve hemos probado de todo incluso instalamos un opencart desde cero e importamos los productos y la lentitud es tal que genera error 500 en todos los servidores donde la hemos migrado. He colocado el archivo que me indicaste en el vQmod/xml pero me genera este error:

Borra Incides si se han creado anteriormente.Warning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 20Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 20
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 21Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 21
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 22Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 22
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 23Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 23
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 24Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 24
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 25Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 25
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 26Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 26
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 27Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 27
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 28Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 28
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 29Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 29
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 30Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 30
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 31Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 31
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 32Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 32
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 33Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 33
FAIL
Creando Indices.
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 37Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 37
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 38Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 38
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 39Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 39
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 40Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 40
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 41Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 41
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 42Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 42
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 43Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 43
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 44Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 44
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 45Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 45
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 46Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 46
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 47Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 47
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 48Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 48
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 49Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 49
FAILWarning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 50Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 50
FAIL
Indices Creados correctamente.
FAIL
Ya puede borrar el fichero indices.xml
FAIL

Gracias de antemano con todo lo que me puedas ayudar al respecto

Responder

Hola,
Pues la verdad que tendría que mirar en detalle tu web para poder darte una opinión más profesional.

Yo he montado tiendas con 5.000 productos y van bastante rápidos. Sin problemas.

Si me das más info, le echo un vistazo por si puedo ayudarte.

Un saludo

Responder

tengo problemas aplicando el xml en el vQmod pueden ver los errores generados al final de la pagina universionplus.com.ve
Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-

Queria saber si me pueden ayudar al respecto. La página funciona perfecto si navega una sola persona. Basta que accesen 2 o más personas y la página se pone TAAAN LENTA que genera error 500. He probado de todo, permisos, cambio de servidor de todo y nada. Montamos la base de datos en un opencart totalmente nuevo y sigue pasando lo mismo… Quisiera me pudieran ayudar al respecto mil gracias de antemano….

Responder

gracias por tu respuesta el principal problema es q intento subir al vQmor el.archivo xml que dejaste aqui y al final de la pagina dice FAIL con el siguiente error…

Warning: mysql_query(): Access denied for user ‘root’@’localhost’ (using password: NO) in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 20Warning: mysql_query(): A link to the server could not be established in /home/universio/public_html/vqmod/vqcache/vq2-catalog_view_theme_zMaxcart_template_common_footer.tpl on line 20

ese junto a otros errores similares ,por favor indicame que otro dato necesitas ftp o cualquier dato para que me eches una mano con ese asunto…mi correo es xxxx mil gracias

Responder

Hola Luis,

Te da un problema de permisos para crear los indices en las tablas de Opencart, es posible que cuando creaste el usuario y la base de datos no asociases todos los privilegios de ese usuario a esa base de datos,
ya que Opencart no necesita los privilegios de crear indices sobre las tablas ya que no los utiliza.

Entiendo que puede ser ese el error, yo habitualmente le doy todos los permisos y lo lanzo desde la base de datos.

La solución más fácil que hagas login en tu base de datos, a través de tu hosting o de tu phpMyadmin y lances este “código” desde la consola online de sql:

Tan solo tienes que lanzar esto desde la consola SQL:

#Tabla category campo parent_id
CREATE INDEX i_parent_id ON category (parent_id);

#Tabla category_description campo language_id
CREATE INDEX i_category_description ON category_description (language_id);

#Tabla category_path campos path_id y level
CREATE INDEX i_category_path ON category_path (path_id,level);

#Tabla category_to_store campo store_id
CREATE INDEX i_category_to_store ON category_to_store (store_id);

#Tabla manufacturer_to_store campo store_id
CREATE INDEX i_manufacturer_to_store ON manufacturer_to_store (store_id);

#Tabla product campos manufacturer_id, date_added, date_modified
CREATE INDEX i_product ON product (manufacturer_id, date_added, date_modified);

#Tabla product campos model, sku, upc, ean,(como veis donde tengais la referencia etc) y con tipo FULLTEXT (si el campo es de caracteres no de números)
CREATE FULLTEXT INDEX i_product_fulltext ON product (model, sku, upc, ean);

#Tabla product_description campo language_id
CREATE INDEX i_product_description ON product_description (language_id);

#Tabla product_to_category campo category_id
CREATE INDEX i_product_to_category ON product_to_category (category_id);

#Tabla product_to_store campo store_id
CREATE INDEX i_product_to_store ON product_to_store (store_id);

#Tabla setting campo store_id, serialized
CREATE INDEX i_setting ON setting (store_id, serialized);

#Tabla url_alias campo query con tipo FULLTEXT
CREATE FULLTEXT INDEX i_url_alias ON url_alias (query);# 6936 filas afectadas.

#Tabla zone campo country_id
CREATE INDEX i_zone ON zone (country_id);

#Tabla zone campo name y code con tipo FULLTEXT
CREATE FULLTEXT INDEX i_zone_fulltext ON zone (name,code);

Hazte una copia antes si quieres de tu base de datos, aunque no tiene mucho misterio.

Si tienes dudas estoy por aquí.

Un saludo,

Responder

Gracias por tu respuesta anterior. Te comento que revisando los permisos desde la consola PHP del cpanel veo que tiene TODOS LOS PRIVILEGIOS activos (desde el cpanel en el mysql databases) y aun asi sigue el mismo problema si puedes revisa para que veas al final que dice FAIL… Te agradeceria toda la ayuda que me puedas dar al respecto. Si puedes entra a la pagina desde varias computadoras para que veas que llega un momento que se cuelga …si se abre de una sola no hay problema el problema se presenta al accesar desde varias maquinas… se me olvido comentarte la url de la página: xxxx.xxx.xx

Responder

Buenos días Luis,

Revisando tu página el problema que tienes es que no te deja acceder como usuario root@localhost , por lo general desde localhost siempre tienes acceso a la base de datos y a ejecutar más ficheros que desde otros usuarios, es una configuración bastante general aunque se puede restringir desde el hosting o desde tu panel de administración, para fortalecer la seguridad.

Entonces, lo que ocurre es que intentamos modificar la base de datos desde el usuario root@localhost que habitualmente tiene permisos, pero en tu web en particular no es así.

Lo más fácil que puedes hacer es lanzar la creación de indices desde PhpMyAdmin y olvidarte del archivo, porque desde el archivo no lo vas a conseguir a no ser que le des permisos.

Respecto a que se cae la web, pues eso ya es problema de tu hosting en cuanto tiene un poco de concurrencia en el tráfico te lanza un error de tiempo de respuesta, parece el típico error 500. Este problema te seguirá saliendo aunque pongas los indices, porque la web irá algo más rápido pero seguirás teniendo problemas de concurrencia.

Si cacheas la web es muy posible que el problema de concurrencia se solucione o por lo menos se solucione considerablemente.

Te envío un mail por si necesitas más ayuda.

Saludos

Responder

el problema radica en que he probado ya con dos servidores y nada..ocurre lo mismo se queda colgada y genera al final un error 500…será por la cantidad de productos???? son 6000…. como puedo cachearla…porfa mandame tu correo para saber si me puedes asesorar al respecto ya q he estado con este problema y ya no sé q hacer… no sé si es recursos o si es el opencart..

mi correo es xxxxx@xxxxx.com agradecido de antemano…

Responder

Buenos días Luis,

Mi correo es este xxxxxxxx@xxxx.com te envié el otro día una email, revisa tu curreo.

El problema para crear los indices lo puedes solventar creándolos desde phpMyadmin, esto te dará un poquito más de velocidad en las consultas a la base de datos. Con lo que el tiempo de respuesta de tu web será un poquito menor.

Pero ya te digo que el error 500 es porque tu servidor se “sobrecarga de trabajo” en cuando le haces tres peticiones. Y con la creación de indices te puede ayudar levemente con este problema, pero solo levemente. Deberías cachear la web, para que no te ocurra este problema.

Para solventar ese problema tienes que utilizar alguna extensión de Opencart que cachee la web, las tienes gratuitas y de pago, yo uso una de pago que va muy bien.

Respecto a lo que comentas de los 6000 productos, te diré que yo tengo varías tiendas de clientes con 6000-8000 productos y no dan problema, el hosting en el que están esas webs es hostgator y digamos que hostgator es un hosting muy normalito. Que no soporta grandes cargas de trabajo. Las tienen en planes de share hosting. Vamos que no tienen un servidor dedicado.

Tienes mi email para cualquier cosa!
Un saludo,
Miguel

Responder

Buenos dias, queria tomarme mi tiempo para agradecerte esta solucion que ha sido descarada, ha mejorado brutalmente, voy a seguir tus articulos y a leer todo!

Muchisimas gracias. Antes tardaba como 7 segundos ahora no llega a 3, aunque es lenta aun, mejoro un monton!

Responder

Buenas Ismael,

La verdad que va muy bien, me alegro que te guste!. No sabes toda la de gente que me pregunta por este script, que es realmente sencillo y acelera considerablemente la velocidad de la base de datos, sobre todo cuantos más artículos tienes.

Sinceramente no se como Opencart no incluye índices en sus tablas, sería lo más lógico y no tiene “efectos secundarios”.

Un saludo,
Miguel

Responder

Si necesitáis más velocidad aún yo probaría con sistemas de cache, para todo tanto para cachear consultas, como cachear las páginas, comprimir el envío de datos desde el servidor etc etc.

Si necesitáis y queréis cachear Opencart prometo hacer un artículo para mostrar como se hace, yo lo tengo hecho con varias tiendas de 3000 a 6000 productos y van muy bien. De hecho están en hosting compartidos, con lo que realmente no tienen que gastar mucho ya que sino el propio hosting te llama la atención.

Saludos

Responder

ey,genial, se nota el cambio, muchas gracias por tu trabajo ¿ese articulo para cachear consultar, paginas,etc, lo vas a realizar? me encantaria seguirlo

Responder

De nada Juan, para eso estamos!

Pues la verdad que lo tengo hecho en una tienda online y se nota otro poquito, en velocidad todo suma. Pero ahora mismo me falta tiempo para recuperar el código y montar un buen tutorial para mejorar un poquito más la velocidad de Opencart.

Tengo demasiados frentes abiertos y ahora mismo no dispongo de tanto tiempo. De todas maneras cuando lo monte lo publicaré en la web para que todos lo podamos utilizar libremente.

Saludos

Responder

vale!! gracias!!!!

Responder

Hola no logro descargar el archivo para subirlo a XML de mi Vqmod podrias ayudarme por favor o enviarme el archivo a mi correo electronico saludos amigo

Responder

Hola Junior,
Lo tienes en este enlace, solo tienes que hacer click, saludos!
https://www.codifica.me/descargas/crear-indices-opencart.zip

Responder

Hola, que tal, vaya aporte esto es genial y es lo que estaba buscando, por desgracia soy novato en opencart, y mi pregunta sería cual es el vqmod que debería instalar? vqmod instaler? y posteriormente colocar hay el archivo xml? Mil gracias por la ayuda

Responder

Buenas Toni,
Te lo puedes bajar de github , mira la versión que tienes de opencart y bájate una que te valga, solo tienes que subirlo a tu servidor a la carpeta raiz y acceder a vqmod/install.php, de todas maneras tienes un fichero readme dónde te indica los pasos por si algo ha variado.

https://github.com/vqmod/vqmod/releases
Saludos

Responder

Hola Ber, se podria realizar la siguiente solucion ?

Entiendo que solo con:
ALTER TABLE `product_tag` ADD INDEX ( `product_id` ) ;
ALTER TABLE `product_tag` ADD INDEX ( `tag` ) ;
Ya tendria un mejor rendimiento.

ALTER TABLE `category` ADD INDEX ( `parent_id` ) ;
ALTER TABLE `category` ADD INDEX ( `top` ) ;
ALTER TABLE `category` ADD INDEX ( `sort_order` ) ;
ALTER TABLE `category` ADD INDEX ( `status` ) ;
ALTER TABLE `option` ADD INDEX ( `sort_order` ) ;
ALTER TABLE `option_description` ADD INDEX ( `name` ) ;
ALTER TABLE `option_value` ADD INDEX ( `option_id` ) ;
ALTER TABLE `option_value_description` ADD INDEX ( `option_id` ) ;
ALTER TABLE `order` ADD INDEX ( `customer_id` ) ;
ALTER TABLE `product` ADD INDEX ( `model` ) ;
ALTER TABLE `product` ADD INDEX ( `sku` ) ;
ALTER TABLE `product` ADD INDEX ( `upc` ) ;
ALTER TABLE `product` ADD INDEX ( `manufacturer_id` ) ;
ALTER TABLE `product` ADD INDEX ( `sort_order` ) ;
ALTER TABLE `product` ADD INDEX ( `status` ) ;
ALTER TABLE `product_option` ADD INDEX ( `option_id` ) ;
ALTER TABLE `product_option_value` ADD INDEX ( `product_option_id` ) ;
ALTER TABLE `product_option_value` ADD INDEX ( `product_id` ) ;
ALTER TABLE `product_option_value` ADD INDEX ( `option_id` ) ;
ALTER TABLE `product_option_value` ADD INDEX ( `option_value_id` ) ;
ALTER TABLE `product_tag` ADD INDEX ( `product_id` ) ;
ALTER TABLE `product_tag` ADD INDEX ( `tag` ) ;
ALTER TABLE `url_alias` ADD INDEX ( `query` ) ;
ALTER TABLE `url_alias` ADD INDEX ( `keyword` ) ;
ALTER TABLE `user` ADD INDEX ( `username` ) ;
ALTER TABLE `user` ADD INDEX ( `password` ) ;
ALTER TABLE `user` ADD INDEX ( `email` ) ;

Responder

Buenas RAP , te puede valer si,

Los indices se utilizan para mejorar la velocidad en la que devuelven los datos, utiliza los indices sobre los campos que por los que vayas a utilizar en tus Querys.

Responder