sql >> Base de Datos >  >> RDS >> Mysql

¿Alguien puede explicar la función de indexación de Magentos en detalle?

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:

  1. El product_id del artículo (en la tabla de productos)
  2. El attribute_id para color (en la tabla de atributos)
  3. 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