2011-02-09 47 views
13

我有点得到如何在Magento中的索引工作,但我没有看到任何关于此的好文档。我希望知道以下内容。有人可以详细解释Magentos索引功能吗?

  • 它是如何工作
  • 其目的是什么
  • 为什么很重要
  • 哪些细节大家都应该了解它
  • 其他任何可以帮助别人充分了解索引是什么,它如何在Magento中使用

我认为这些信息对我的船上的其他人没有太大用处索引过程。

更新: 在对我的问题和Ankur的回答发表评论后,我想我错过了我刚才正常的数据库索引方面的知识。那么这只是Magento的处理索引版本,对于我来说,通常在数据库索引方面获得我的答案会更好,例如此处的链接How does database indexing work?

+0

不熟悉Magento的,但你的意思是在数据存储在Magento的方式吗?索引意味着MySQL索引,对此已经有大量的信息可用。 – richsage 2011-02-09 13:16:57

+0

在Magento中,有很多索引表用于重新索引数据库中的数据。如果你说的是同一件事,我就不那么熟悉了。也许是这样,也许我错过了正常的MySQL索引,如果这是一回事。 – 2011-02-09 13:32:03

回答

32

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所做的(对数据类型的尊重比我在这里展示的要多一点)。事实上,现在没有理由让两种产品具有完全相同的字段,因此我们可以使用不同的属性集创建整个产品类型

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

  1. 项目的product_id(产品表)
  2. attribute_idcolor(以属性表)
  3. 最后,实际value(在ATTRIBUTE_VALUES表)

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

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

希望澄清事情有点!

谢谢, 乔

3

Magento索引与某些正常的数据库索引类似,但差别很大是你需要在某些情况下手动完成。

当您执行索引时,例如目录索引,然后在不同类型的排序的单独表中输入目录产品。一个小例子是存储区,假设您有一个产品和不同的详细信息那么它首先会从单独表中的复杂联接中获取记录(当您执行索引时)

其他最佳示例是分层导航索引:如果您要运行分层导航索引,那么它将检查产品数据库为所有商店通过过滤器属性,然后在每个属性上产品如何可用,它也将存储该值。

主要是这种类型的索引,如果你正在做一些直接的数据库需要变更或者虽然自己的自定义代码

请让我知道如果你有索引的其他查询

8

Magento的索引是不相似的正常的数据库索引,更像是数据库非规范化(http://en.wikipedia.org/wiki/Denormalization)进程。在大多数情况下,它采用EAV结构,并使其可用于平板结构,这无疑更快地访问和搜索。

如果你的正常EAV查询是200左右加入让所有的目录在它们的属性和分层导航价值的产品和数据,那么“索引”之后,该数据可通过非规范化的数据结构实现更快的查询/访问

相关问题