dan*_*des 14 php mysql database indexing 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在我的系统中找到一件衬衫(一个简单的例子),我需要找到:
product_id项目的(在产品表)attribute_id用于color(在属性表)value(在attribute_values表中)Magento曾经像这样工作,但它已经死了.因此,为了获得更好的性能,他们做出了妥协:一旦店主定义了他们想要的属性,就从头开始生成大表.当某些东西发生变化时,从空间中进行核对并再次生成它.这样,数据主要以我们灵活的格式存储,但是从单个表中查询.
这些结果查找表是Magento"索引".当你重新索引时,你正在炸毁旧表并再次生成它.
希望澄清一点事情!
谢谢,乔
Magento索引与普通数据库索引不相似,更像是数据库非规范化(http://en.wikipedia.org/wiki/Denormalization)过程.在大多数情况下,它采用EAV结构并使其可用于平台结构,毫无疑问,访问和搜索更快.
如果您的正常EAV查询将是200左连接以通过其属性和分层导航值获取目录和数据中的所有产品,那么在"索引"之后,可通过非规范化数据结构获得此数据,以便更快地查询/访问