Magento tem muitas tabelas para gerenciar preços
Parece-me que:
- nas páginas de produto / categoria, os preços do produto são carregados das tabelas catalog_product_flat .
- nas páginas de pesquisa, a tabela _idx é usada (acho que para o filtro de faixa de preço).
Tabela com dados
| Tabela Notas | | --------------------------------------------- | --- --------------------- | | catalog_product_index_price | tem dados - tabela principal | | catalog_product_index_price_idx | tem dados | | catalog_product_index_price_tmp | tem dados |
Tabela sem dados
| Tabela Notas | | --------------------------------------------- | --- --------------------- | | catalog_product_index_price_bundle_idx | sem dados | | catalog_product_index_price_bundle_opt_idx | sem dados | | catalog_product_index_price_bundle_opt_tmp | sem dados | | catalog_product_index_price_bundle_sel_idx | sem dados | | catalog_product_index_price_bundle_sel_tmp | sem dados | | catalog_product_index_price_bundle_tmp | sem dados | | catalog_product_index_price_cfg_opt_agr_idx | sem dados | | catalog_product_index_price_cfg_opt_agr_tmp | sem dados | | catalog_product_index_price_cfg_opt_idx | sem dados | | catalog_product_index_price_cfg_opt_tmp | sem dados | | catalog_product_index_price_downlod_idx | sem dados | | catalog_product_index_price_downlod_tmp | sem dados | | catalog_product_index_price_final_idx | sem dados | | catalog_product_index_price_final_tmp | sem dados | | catalog_product_index_price_opt_agr_idx | sem dados | | catalog_product_index_price_opt_agr_tmp | sem dados | | catalog_product_index_price_opt_idx | sem dados | | catalog_product_index_price_opt_tmp | sem dados |
Portanto, parece que existem apenas 3 tabelas que possuem dados:
- catalog_product_index_price
- catalog_product_index_price_idx
- catalog_product_index_price_tmp
A única tabela usada atualmente é catalog_product_index_price , a navegação em camadas a utiliza para filtrar os produtos por preço. (consulte Mage_Catalog_Model_Resource_Layer_Filter_Price -> _ getPriceExpression () )
Tabelas: catalog_product_index_price
| entity_id | customer_group_id | website_id | tax_class_id | preço | preço final | min_price | max_price | preço_ier | preço_grupo |
Ele hospeda todas as combinações de sites / grupo de clientes. Minha matemática de permutação não é muito boa de qualquer maneira, suponha que você tenha:
- 100.000 produtos
- 2 sites (um escopo de atributo de preço definido como site)
- 10 grupos de clientes
=> 100.000 * 2 * 10 = 2.000.000 linhas
Se você não usar preços diferentes para grupos de clientes diferentes, acabará ocupando muito espaço no DB e a reindexação dos preços será muito lenta. (Como basicamente todas as 20 linhas de cada produto conterão os mesmos valores)
Questões:
- É seguro excluir todas as tabelas vazias acima?
- Por que existem 3 tabelas catalog_product_index_price com dados, mas apenas 1 é realmente usado?
Otimização:
- Seria possível reduzir a quantidade de linhas na tabela de índices, caso os preços do produto sejam iguais para todas as combinações?