Magento a de nombreuses tables pour gérer les prix
Il me semble que:
- dans les pages produit / catégorie, les prix des produits sont chargés à partir des tables catalog_product_flat .
- dans les pages de recherche, la table _idx est utilisée (je pense que pour le filtre de fourchette de prix).
Tableau avec données
| Table | Remarques | | --------------------------------------------- | --- --------------------- | | catalog_product_index_price | a des données - tableau principal | | catalog_product_index_price_idx | a des données | | catalog_product_index_price_tmp | a des données |
Tableau sans données
| Table | Remarques | | --------------------------------------------- | --- --------------------- | | catalog_product_index_price_bundle_idx | pas de données | | catalog_product_index_price_bundle_opt_idx | pas de données | | catalog_product_index_price_bundle_opt_tmp | pas de données | | catalog_product_index_price_bundle_sel_idx | pas de données | | catalog_product_index_price_bundle_sel_tmp | pas de données | | catalog_product_index_price_bundle_tmp | pas de données | | catalog_product_index_price_cfg_opt_agr_idx | pas de données | | catalog_product_index_price_cfg_opt_agr_tmp | pas de données | | catalog_product_index_price_cfg_opt_idx | pas de données | | catalog_product_index_price_cfg_opt_tmp | pas de données | | catalog_product_index_price_downlod_idx | pas de données | | catalog_product_index_price_downlod_tmp | pas de données | | catalog_product_index_price_final_idx | pas de données | | catalog_product_index_price_final_tmp | pas de données | | catalog_product_index_price_opt_agr_idx | pas de données | | catalog_product_index_price_opt_agr_tmp | pas de données | | catalog_product_index_price_opt_idx | pas de données | | catalog_product_index_price_opt_tmp | pas de données |
Il ne semble donc y avoir que 3 tables contenant des données:
- catalog_product_index_price
- catalog_product_index_price_idx
- catalog_product_index_price_tmp
La seule table réellement utilisée est catalog_product_index_price , la navigation par couches l'utilise pour filtrer les produits par prix. (voir Mage_Catalog_Model_Resource_Layer_Filter_Price -> _ getPriceExpression () )
Tables: catalog_product_index_price
| entity_id | customer_group_id | website_id | tax_class_id | prix | prix_final | min_price | max_price | tier_price | group_price |
Il héberge toutes les combinaisons de sites Web / groupe de clients. Mes calculs de permutation ne sont pas très bons de toute façon, supposons que vous ayez:
- 100.000 produits
- 2 sites Web (la portée de l'attribut de prix étant définie sur Site Web)
- 10 groupes de clients
=> 100 000 * 2 * 10 = 2 000 000 lignes
Si vous n'utilisez pas de prix différents pour différents groupes de clients, vous finissez par perdre beaucoup d'espace sur DB et la réindexation des prix sera très lente. (Parce que, fondamentalement, les 20 lignes de chaque produit contiendront les mêmes valeurs)
Des questions:
- Est-il sûr de supprimer toutes les tables vides ci-dessus?
- Pourquoi il y a 3 table catalog_product_index_price avec des données mais seulement 1 est réellement utilisé?
Optimisation:
- Serait-il possible de réduire le nombre de lignes dans le tableau d'index au cas où les prix des produits seraient tous les mêmes pour toutes les combinaisons?
Réponses:
Ces tables vides seront remplies lorsque Magento se réindexera et que le catalogue aura des produits pour le type de produit spécifié.
Il devrait être sûr de supprimer la table _idx que Magento les recréera pendant la réindexation.
La table idx et la table tmp ne sont utilisées que pour l'indexation:
la source