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 Google
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 la velocidad Opencart | Google
Mejorar la velocidad Opencart | Gtmetrix
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]