Cette question concerne la performance, pas de solutions possibles.MySQL: scinder une table en plusieurs tables (mêmes colonnes) pour augmenter la performance?
Mon système contient plusieurs éléments de différentes catégories. Chaque catégorie a sa propre table car chaque table a plusieurs lignes ET les champs sont différents.
ItemA - id, fld1, fld2
ItemB - id, fld1, fld3, fld4
ItemC - id, fld1, fld3, fld5
....
Maintenant, il est nécessaire de gérer l'inventaire de l'utilisateur, ce qui signifie que l'utilisateur a un élément ou non. Une option utilise une seule table:
Inventory - category_id, item_id, user_id
category_id est différent pour Itema, elementB, ... lignes et voilà comment nous différencions.
Deuxième option est d'avoir:
InventoryA - item_id, user_id
InventoryB - item_id, user_id
...
La première option est probablement le plus facile à gérer, mais la table d'inventaire est énorme (ordre de grandeur: nombre d'articles sur toutes les catégories multiplié par le nombre d'utilisateurs) et souvent mis à jour et fréquemment interrogé.
La deuxième option serait un peu plus difficile à gérer (car nous créons une nouvelle table d'inventaire pour chaque catégorie) mais pourrait introduire un gain de performance car cela pourrait empêcher les conditions de course. Aucune requête ne nécessitera probablement d'impliquer plus d'un des tableaux d'inventaire car les catégories sont assez séparées.
Actuellement, le système utilise le moteur MySQL et InnoDB. Il y a ~ 10 catégories mais devrait atteindre quelques dizaines dans un proche avenir. La plus grande catégorie a> 200k articles et la plupart ont> 10k articles. La table d'inventaire unique a plus de 10M lignes et devrait être BEAUCOUP plus grande à mesure que de nouveaux utilisateurs se joindront.
Je sais que le mieux est de tester la performance des deux méthodes et de décider, mais la vérité est qu'il ne sera pas si rapide et indolore de passer à la conception de plusieurs tables.
Si vous avez expérience personnelle avec un problème similaire, veuillez le partager.
Merci
Peut-on appartenir article (utilisé) par de nombreux utilisateurs? –
Oui Damir, c'est une relation plusieurs-à-plusieurs. – Colnector