Magento 1: Zweck von Magento-Indextabellen im Vergleich zu MySQL-Indizes

7

Ich arbeite seit Jahren mit Magento und ich denke, dass dies eine dumme Frage ist, aber ich habe trotzdem das Gefühl, dass ich einige Klarstellungen brauche.

Wie Sie vielleicht wissen, enthält Magento 1 mehrere Indextabellen wie (ich werde nicht alle auflisten):

  • cataloginventory_stock_status_idx
  • catalog_category_anc_categs_index_idx
  • catalog_category_anc_products_index_idx
  • catalog_category_product_index
  • catalog_product_enabled_index
  • catalog_product_index_* Tabellen
  • report_viewed_product_index

Ich weiß, was der Zweck eines Index ist, aber ich frage mich, wie es besser ist, Indextabellen über MySQL-Indizes zu verwenden. Ich frage mich vor allem, wann man Indextabellen in einem benutzerdefinierten Modul verwenden sollte.

Raphael beim digitalen Pianismus
quelle

Antworten:

5

Unterschiedliche Indizes scheinen in Magento unterschiedliche Zwecke zu haben. Es ist nicht immer gleichbedeutend mit einem MySQL-Index. Beispielsweise enthält die Indextabelle: catalog_category_product_index die Produkt- / Kategoriezuordnungen zusammen mit einigen zusätzlichen Attributen wie Sichtbarkeit, Position usw. Diese Tabelle wird von Core Magento zum Herausziehen von Produkten für Produktlistenseiten für bestimmte Kategorien im Front-End verwendet. Ohne diese Tabelle müsste Magento entweder mit den flachen Tischen oder mit den eav-Tabellen verknüpfen, um alle sichtbaren Produkte abzurufen, die einer Kategorie zugeordnet sind.

Einige dieser Indextabellen können während der Indizierung selbst als temporäre Tabellen verwendet werden, und jede von ihnen hat einen ganz bestimmten Zweck, auf deren Details in einem begrenzten Bereich nur schwer einzugehen ist.

Paras Sood
quelle
3

In einem breiteren und vielleicht vereinfachten Sinne könnten Sie es so betrachten:

  • MySQL-Indizes sollen die Suche in einer einzelnen Spalte bzw. Tabelle beschleunigen

  • Magento-Indizes sind einfach ein Mittel zum Zwischenspeichern von Daten in einer einzelnen Tabelle, die zusammengehören, um JOINs und dergleichen zu vermeiden

Unter diesem Gesichtspunkt sollte Ihr benutzerdefiniertes Modul eine "Index" -Tabelle (Caching-Tabelle) verwenden, wenn diese für teure JOINs anfällig ist . Andernfalls können Sie in der Regel problemlos mit der MySQL-Indizierung oder gar keiner davon durchkommen. Wenn Sie Ihre eigene Indextabelle verwenden, müssen Sie jedoch deren Wartung berücksichtigen.

Pong
quelle