有人可以详细解释Magentos Indexing功能吗?

dan*_*des 14 php mysql database indexing magento

我有点了解Magento中的索引是如何工作的,但我还没有看到任何关于此的好文档.我想知道以下内容.

  • 这个怎么运作
  • 它的目的是什么?
  • 它为什么如此重要
  • 每个人都应该了解的细节是什么
  • 还有什么能帮助别人完全理解索引是什么以及如何在Magento中使用它

我认为拥有这些信息对我船上的其他人来说非常有用,而这些信息并没有完全得到索引过程.

更新:在我的问题评论和Ankur的回答之后,我想我错过了一些关于正常数据库索引的知识.那么这只是Magento处理索引的版本,对我来说,更好的方法是在数据库索引方面得到我的答案,例如这里的链接数据库索引如何工作?

Jos*_*tey 32

Magento的索引仅与数据库级索引相似.正如Anton所说,这是一个非规范化的过程,可以让网站更快地运行.让我试着解释一下Magento数据库结构背后的一些想法,以及它为什么要使索引成为高速运行所必需的.

在更"典型"的MySQL数据库中,用于存储目录产品的表格的结构如下:

PRODUCT:
    product_id INT
    sku        VARCHAR
    name       VARCHAR
    size       VARCHAR
    longdesc   VARCHAR
    shortdesc  VARCHAR
    ... etc ...
Run Code Online (Sandbox Code Playgroud)

这对于检索来说很快,但它给电子商务软件留下了根本问题:当你想要添加更多属性时,你会怎么做?如果您销售玩具而不是尺寸栏,您需要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
Run Code Online (Sandbox Code Playgroud)

现在可以通过输入新值product_attributes然后将相邻记录放入其中来随意添加属性product_attribute_values.这基本上就是Magento所做的事情(对数据类型的尊重比我在这里显示的更多).事实上,现在没有理由让两个产品具有相同的字段,因此我们可以使用不同的属性集创建整个产品类型!

然而,这种灵活性需要付出代价.如果我想color在我的系统中找到一件衬衫(一个简单的例子),我需要找到:

  1. product_id项目的(在产品表)
  2. attribute_id用于color(在属性表)
  3. 最后,实际value(在attribute_values表中)

Magento曾经像这样工作,但它已经死了.因此,为了获得更好的性能,他们做出了妥协:一旦店主定义了他们想要的属性,就从头开始生成大表.当某些东西发生变化时,从空间中进行核对并再次生成它.这样,数据主要以我们灵活的格式存储,但是从单个表中查询.

这些结果查找表是Magento"索引".当你重新索引时,你正在炸毁旧表并再次生成它.

希望澄清一点事情!

谢谢,乔


Ant*_*n S 8

Magento索引与普通数据库索引不相似,更像是数据库非规范化(http://en.wikipedia.org/wiki/Denormalization)过程.在大多数情况下,它采用EAV结构并使其可用于平台结构,毫无疑问,访问和搜索更快.

如果您的正常EAV查询将是200左连接以通过其属性和分层导航值获取目录和数据中的所有产品,那么在"索引"之后,可通过非规范化数据结构获得此数据,以便更快地查询/访问