Je mets en place une table qui pourrait avoir plus de 70 colonnes. Je pense maintenant à le diviser car certaines des données dans les colonnes ne seront pas nécessaires à chaque fois que la table est accédée. Là encore, si je fais cela, je suis obligé d'utiliser des jointures.
À quel moment, le cas échéant, est-il considéré comme trop de colonnes?
Réponses:
Il est considéré comme trop élevé une fois qu'il est supérieur à la limite maximale prise en charge par la base de données .
Le fait que vous n'ayez pas besoin que chaque colonne soit renvoyée par chaque requête est parfaitement normal; c'est pourquoi l'instruction SELECT vous permet de nommer explicitement les colonnes dont vous avez besoin.
En règle générale, la structure de votre table doit refléter votre modèle de domaine; si vous avez vraiment 70 (100, qu'est-ce que vous avez) attributs qui appartiennent à la même entité, il n'y a aucune raison de les séparer en plusieurs tables.
la source
select count(*) from votes
chaque fois ou pensez-vous qu'il est peut-être dénormalisé? Est-ce que cela rend la base de données SO mauvaise et Jeff Atwood fou?Le fractionnement de la table en plusieurs avec moins de colonnes présente certains avantages, également appelé partitionnement vertical . Voici quelques-uns:
Si vous avez des tables avec de nombreuses lignes, la modification des index peut prendre un temps très long, car MySQL doit reconstruire tous les index de la table. La répartition des index sur plusieurs tables pourrait accélérer les choses.
En fonction de vos requêtes et des types de colonnes, MySQL peut écrire des tables temporaires (utilisées dans des requêtes de sélection plus complexes) sur le disque. C'est mauvais, car les E / S de disque peuvent être un gros goulot d'étranglement. Cela se produit si vous avez des données binaires (texte ou blob) dans la requête.
Une table plus large peut ralentir les performances des requêtes.
N'optimisez pas prématurément, mais dans certains cas, vous pouvez obtenir des améliorations à partir de tables plus étroites.
la source
C'est trop quand il enfreint les règles de normalisation. Il est assez difficile d'obtenir autant de colonnes si vous normalisez votre base de données. Concevez votre base de données pour modéliser le problème, pas autour de règles artificielles ou d'idées d'optimisation pour une plate-forme de base de données spécifique.
Appliquez les règles suivantes à la table large et vous aurez probablement beaucoup moins de colonnes dans une seule table.
Voici un lien pour vous aider.
la source
It is pretty hard to get that many columns if you are normalizing your database.
Pas aussi difficile qu'il y paraît.Ce n'est pas un problème à moins que tous les attributs appartiennent à la même entité et ne dépendent pas les uns des autres. Pour vous faciliter la vie, vous pouvez avoir une colonne de texte contenant un tableau JSON. Évidemment, si vous n'avez pas de problème à obtenir tous les attributs à chaque fois. Bien que cela irait totalement à l'encontre de l'objectif de le stocker dans un SGBDR et compliquerait considérablement chaque transaction de base de données. Donc, son approche n'est pas recommandée à suivre dans toute la base de données.
la source
Avoir trop de colonnes dans la même table peut également entraîner d'énormes problèmes dans la réplication. Vous devez savoir que les changements qui se produisent dans le maître seront répliqués sur l'esclave .. par exemple, si vous mettez à jour un champ dans la table, la ligne entière sera w
la source