La indexación de Magento solo es similar a la indexación a nivel de base de datos en espíritu. Como dice Anton, es un proceso de desnormalización para permitir una operación más rápida de un sitio. Permítanme tratar de explicar algunos de los pensamientos detrás de la estructura de la base de datos de Magento y por qué hace que la indexación sea necesaria para operar a gran velocidad.
En una base de datos MySQL más "típica", una tabla para almacenar productos de catálogo estaría estructurada de la siguiente manera:
PRODUCT:
product_id INT
sku VARCHAR
name VARCHAR
size VARCHAR
longdesc VARCHAR
shortdesc VARCHAR
... etc ...
Esto es rápido para la recuperación, pero deja un problema fundamental para una pieza de software de comercio electrónico:¿qué haces cuando quieres agregar más atributos? ¿Qué sucede si vende juguetes y, en lugar de una columna de tamaño, necesita age_range
? ? Bueno, podría agregar otra columna, pero debe quedar claro que en una tienda grande (piense en Walmart, por ejemplo), esto daría como resultado filas que están vacías en un 90 % y tratar de mantener nuevos atributos es casi imposible.
Para combatir este problema, Magento divide las tablas en unidades más pequeñas. No quiero recrear todo el sistema EAV en esta respuesta, así que acepte este modelo simplificado:
PRODUCT:
product_id INT
sku VARCHAR
PRODUCT_ATTRIBUTE_VALUES
product_id INT
attribute_id INT
value MISC
PRODUCT_ATTRIBUTES
attribute_id
name
Ahora es posible agregar atributos a voluntad ingresando nuevos valores en product_attributes
y luego poner registros contiguos en product_attribute_values
. Esto es básicamente lo que hace Magento (con un poco más de respeto por los tipos de datos de lo que he mostrado aquí). De hecho, ahora no hay ninguna razón para que dos productos tengan campos idénticos, por lo que podemos crear tipos de productos completos. con diferentes conjuntos de atributos!
Sin embargo, esta flexibilidad tiene un costo. Si quiero encontrar el color
de una camisa en mi sistema (un ejemplo trivial), necesito encontrar:
- El
product_id
del artículo (en la tabla de productos) - El
attribute_id
paracolor
(en la tabla de atributos) - Finalmente, el
value
real (en la tabla de valores_atributos)
Magento solía funcionar así, pero era muy lento. Entonces, para permitir un mejor rendimiento, hicieron un compromiso:una vez que el propietario de la tienda haya definido los atributos que desea, continúe y genere la tabla grande desde el principio. Cuando algo cambie, elimínalo desde el espacio y vuelve a generarlo. De esa forma, los datos se almacenan principalmente en nuestro agradable formato flexible, pero se consultan desde una sola tabla.
Estas tablas de búsqueda resultantes son los "índices" de Magento. Cuando vuelve a indexar, está explotando la tabla anterior y volviéndola a generar.
¡Espero que eso aclare un poco las cosas!
Gracias, Joe