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

| entity_id | 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 строк

Если вы не используете разные цены для разных групп клиентов, вы в итоге тратите много места на БД, и переиндексация цены будет очень медленной. (Потому что в основном все 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, будут иметь данные, только если у вас есть связанные, конфигурируемые и загружаемые продукты внутри сайта. Другие могут быть использованы для хранения окончательной цены с вторичными валютами и т. Д., Но в этом я не уверен.
Эйрик

Ответы:


2

Это безопасно * удалить все вышеупомянутые пустые таблицы?

Эти пустые таблицы будут заполнены, когда Magento переиндексирует, и в каталоге есть продукты для указанного типа продукта.
Должно быть безопасно удалить таблицу _idx, которую Magento создаст заново во время переиндексации.

Почему есть 3 таблицы с данными, но фактически используется только 1?

Таблицы idx и tmp используются только для индексации:

  • _tmp пуст и будет заполнен во время переиндексации
  • _idx - это фактическая таблица индексов

извините, ваш ответ просто ничего не говорит мне.
Fra

Можете ли вы быть более конкретным о том, что не ясно?
Quisse

Я знаю, что эти таблицы являются индексами, я знаю, что вы можете урезать индекс (вы говорите, что не можете, но это неправда, вам просто нужно переиндексировать после) вы ничего нового не говорите .... если у вас нет ответ на вопрос, который вы должны
Fra

Извините за попытку помочь, вы даже прочитали мой ответ? Вам действительно нужно разместить мои ответы рядом с вашими вопросами.
Quisse

Теперь я сделал это для тебя. Я надеюсь, что у нас может быть конструктивный диалог, чтобы решить вопрос.
Quisse
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.