2016-11-25 57 views

回答

0

不能采取信贷这样的:Can someone explain Magentos Indexing feature in detail?

Magento的索引仅仅是类似于数据库级别的索引的精神。正如安东所言,这是一个非正规化的过程,可以让网站的运行速度更快。让我试着解释一下Magento数据库结构背后的一些想法,以及为什么它需要索引来快速运行。

在一个更“典型”的MySQL数据库,用于存储目录的产品表将结构是这样的:

PRODUCT: 
    product_id INT 
    sku  VARCHAR 
    name  VARCHAR 
    size  VARCHAR 
    longdesc VARCHAR 
    shortdesc VARCHAR 
    ... etc ... 

这是快速检索,但它留下一个根本性的问题换了一块电子商务的软件:当你想添加更多属性时你会做什么?如果你卖玩具,而不是大小栏,你需要age_range?那么,你可以添加另一列,但应该清楚,在一个大型商店(比如沃尔玛),这会导致90%的空行,并试图维护新的属性几乎是不可能的。

为了解决这个问题,Magento将表分成更小的单位。我不想重新创建整个EAV系统在这个答案,因此,请接受这个简化的模型:

PRODUCT: 
    product_id INT 
    sku  VARCHAR 

PRODUCT_ATTRIBUTE_VALUES 
    product_id INT 
    attribute_id INT 
    value  MISC 

PRODUCT_ATTRIBUTES 
    attribute_id 
    name 

现在,可以通过输入新值到product_attributes,然后把相邻记录到product_attribute_values添加随意属性。这基本上是Magento所做的(对数据类型的尊重比我在这里展示的要多一点)。事实上,现在没有理由让两种产品具有完全相同的字段,因此我们可以使用不同的属性集创建完整的产品类型!

但是,这种灵活性需要付出代价。如果我想找到我的系统(一个简单的例子),衬衫的颜色,我需要找到:

  • 项目的PRODUCT_ID(产品表)
  • 颜色的attribute_id(以属性表)
  • 最后,实际值(在ATTRIBUTE_VALUES表)

Magento的使用这样的工作,但它是死的慢。所以,为了更好的表现,他们做出了妥协:一旦店主确定了他们想要的属性,就从头开始生成大表。当一些东西发生变化时,将它从空间中取出并重新生成。这样,数据主要以我们良好的灵活格式存储,但是从单个表中查询。

这些生成的查找表是Magento的“索引”。当您重新编制索引时,您将炸毁旧桌子并重新生成。