Magento 1.9:产品价格表-它们如何工作?


9

Magento有很多表格可以管理价格

在我看来:

  • 在产品/类别页面中,产品价格是从catalog_product_flat表中加载的。
  • 在搜索页面中,使用_idx表(我认为是价格范围过滤器)。

数据表

| 桌子 注意事项
| --------------------------------------------- | --- --------------------- |
| catalog_product_index_price | 有数据-主表|
| catalog_product_index_price_idx | 有数据|
| catalog_product_index_price_tmp | 有数据|

没有数据的表

| 桌子 注意事项
| --------------------------------------------- | --- --------------------- |
| catalog_product_index_price_bundle_idx | 没有数据
| catalog_product_index_price_bundle_opt_idx | 没有数据
| catalog_product_index_price_bundle_opt_tmp | 没有数据
| catalog_product_index_price_bundle_sel_idx | 没有数据
| catalog_product_index_price_bundle_sel_tmp | 没有数据
| catalog_product_index_price_bundle_tmp | 没有数据
| catalog_product_index_price_cfg_opt_agr_idx | 没有数据
| catalog_product_index_price_cfg_opt_agr_tmp | 没有数据
| catalog_product_index_price_cfg_opt_idx | 没有数据
| catalog_product_index_price_cfg_opt_tmp | 没有数据
| catalog_product_index_price_downlod_idx | 没有数据
| catalog_product_index_price_downlod_tmp | 没有数据
| catalog_product_index_price_final_idx | 没有数据
| catalog_product_index_price_final_tmp | 没有数据
| catalog_product_index_price_opt_agr_idx | 没有数据
| catalog_product_index_price_opt_agr_tmp | 没有数据
| catalog_product_index_price_opt_idx | 没有数据
| catalog_product_index_price_opt_tmp | 没有数据

因此,看起来只有3个表具有数据:

  • catalog_product_index_price
  • catalog_product_index_price_idx
  • catalog_product_index_price_tmp

唯一实际使用的表是catalog_product_index_price,层导航使用它来按价格过滤产品。(请参阅Mage_Catalog_Model_Resource_Layer_Filter_Price-> _ getPriceExpression()

表格:catalog_product_index_price

| 实体编号| customer_group_id | website_id | tax_class_id | 价格| final_price | min_price | max_price | tier_price | 价格

它托管了网站/客户组的所有组合。我的排列数学仍然不是很好,但前提是您有:

  • 100.000产品
  • 2个网站(将价格属性范围设置为“网站”)
  • 10个客户群

=> 100.000 * 2 * 10 = 2.000.000行

如果您不对不同的客户群使用不同的价格,那么您最终将在DB上占用大量空间,并且价格重新编制索引将非常缓慢。(因为基本上每个产品的所有20行将包含相同的值)

问题:

  1. 删除以上所有空表是否安全?
  2. 为什么有3个带有数据的表catalog_product_index_price,但实际上只使用1个?

优化:

  1. 如果所有组合的产品价格都相同,则有可能减少索引表中的行数。

1
至于所有表,我无法回答,但是只有某些目录(例如,您在网站内部捆绑,可配置和可下载的产品)中的某些目录(例如catalog_product_index_price_bundle_x,catalog_product_index_price_cfg_x和catalog_product_index_price_downlod_x)才具有数据。其他货币可能被用来存储带有二级货币等的最终价格,但是对此我并不乐观。
艾瑞克(Eirik)

Answers:


2

删除所有上述空表是否安全*?

当Magento重新索引并且目录中包含用于指定产品类型的产品时,将填充这些空表。
删除_idx表应该是安全的,Magento将在重新索引期间重新创建它们。

为什么有3个带有数据的表,但实际上只使用1个?

idx表和tmp表仅用于索引:

  • _tmp为空,它将在重新索引期间填充
  • _idx是实际的索引表

对不起,您的回答只是对我无话可说。
弗拉

您能否更详细地说明不清楚的地方?
Quisse

我知道那些表是索引,我知道您可以截断索引(您说不能,但是那不是真的,您只需要在之后重新索引),您就什么都没说了.....如果您没有您应该发表评论而不是回答问题的答案
Fra

很抱歉尝试提供帮助,您还阅读我的回答吗?您确实需要将我的答案放在您的问题旁边。
Quisse

现在,我已经为您完成了。我希望我们能有一个建设性的对话来解决这个问题。
Quisse
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.