Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有人能详细解释一下Magentos的索引功能吗?_Php_Mysql_Database_Magento_Indexing - Fatal编程技术网

Php 有人能详细解释一下Magentos的索引功能吗?

Php 有人能详细解释一下Magentos的索引功能吗?,php,mysql,database,magento,indexing,Php,Mysql,Database,Magento,Indexing,我有点了解Magento中的索引是如何工作的,但我还没有看到任何关于这方面的好文档。我想知道以下几点 工作原理 它的目的是什么 为什么它很重要 每个人都应该知道的细节是什么 还有什么可以帮助人们完全理解什么是索引以及如何在Magento中使用索引的吗 我认为拥有这些信息对我船上其他没有完全了解索引过程的人会有很大的帮助 更新: 在对我的问题和Ankur的回答进行了评论之后,我认为我在普通数据库索引方面缺少了一些知识。因此,这只是Magento处理索引的版本吗?对于我来说,从数据库索引的角度得

我有点了解Magento中的索引是如何工作的,但我还没有看到任何关于这方面的好文档。我想知道以下几点

  • 工作原理
  • 它的目的是什么
  • 为什么它很重要
  • 每个人都应该知道的细节是什么
  • 还有什么可以帮助人们完全理解什么是索引以及如何在Magento中使用索引的吗
我认为拥有这些信息对我船上其他没有完全了解索引过程的人会有很大的帮助

更新:
在对我的问题和Ankur的回答进行了评论之后,我认为我在普通数据库索引方面缺少了一些知识。因此,这只是Magento处理索引的版本吗?对于我来说,从数据库索引的角度得到我的答案更好吗?例如,这里的这个链接

Magento索引在某种程度上类似于普通的数据库索引,但不同的是,在某些情况下需要手动执行

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

另一个最好的例子是分层导航索引:如果您要运行分层导航索引,那么它将在产品数据库中检查“所有店铺按过滤器”属性,然后在每个属性上“产品的可用性”也将存储该值

如果您正在进行一些直接的数据库更改,或者通过自己的自定义代码,则主要需要这种类型的索引


请告诉我您是否有其他关于索引的查询

Magento索引与普通数据库索引不同,更像是数据库反规范化()过程。在大多数情况下,它采用EAV结构,并可用于平板表结构,毫无疑问,平板表结构的访问和搜索速度更快


如果您的普通EAV查询是200个左联接,以获取目录中的所有产品及其属性和分层导航值上的数据,那么在“索引”之后这些数据可以通过非规范化的数据结构来更快地查询/访问

Magento的索引在本质上与数据库级索引相似。正如Anton所说,这是一个非规范化的过程,以允许更快地操作站点。让我试着解释Magento数据库结构背后的一些想法,以及为什么它会在高速运行时,必须进行索引

在更“典型”的MySQL数据库中,存储目录产品的表的结构如下:

PRODUCT:
    product_id INT
    sku        VARCHAR
    name       VARCHAR
    size       VARCHAR
    longdesc   VARCHAR
    shortdesc  VARCHAR
    ... etc ...
这对于检索来说是很快的,但是对于一个电子商务软件来说,它留下了一个基本的问题:当你想添加更多属性时,你会怎么做?如果你卖玩具,而不是一个尺寸栏,你需要
age\u 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
现在可以随意添加属性,方法是在
产品属性中输入新值,然后将相邻的记录放入
产品属性值中。这基本上就是Magento所做的(对数据类型的尊重比我在这里展示的要多一些).事实上,现在根本没有理由让两个产品具有相同的字段,因此我们可以使用不同的属性集创建整个产品类型

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

  • 项目的
    产品id
    (在产品表中)
  • 颜色的
    属性\u id
    (在属性表中)
  • 最后,实际的
    (在属性值表中)
  • Magento过去是这样工作的,但速度非常慢。因此,为了获得更好的性能,他们做出了妥协:一旦店主定义了他们想要的属性,就开始从一开始就生成一个大表。当某些内容发生变化时,从空间对其进行核处理并重新生成。这样,数据主要存储在我们的nice fle中灵活的格式,但从单个表查询

    这些生成的查找表是Magento“索引”。当您重新索引时,您将炸毁旧表并再次生成它

    希望能澄清一点

    谢谢,
    Joe

    不熟悉Magento,但你是说数据在Magento中的存储方式吗?索引意味着MySQL索引,对于MySQL索引,已经有大量可用信息。在Magento中,有许多索引表用于重新索引数据库中的数据。如果与y相同,我就不太熟悉了你说的是。也许是,也许我遗漏了一些关于普通MySQL索引的东西,如果这是同一件事。那么,当你查找产品的价格时,是不是查询
    目录产品索引价格
    ,而不是
    目录产品实体(实体)十进制
    ,以及它需要的任何其他联接?是的,会的改为使用价格指数。这实际上考虑了另一种情况:最小和最大定价只能通过使用一些PHP代码来确定,但通常会显示在目录中。因此,通过使用指数,您可以在索引时计算它,并重新使用价格指数的结果。好的,我现在得到了更多,现在我开始查看这些表所在的代码是act