130 votes

Ce qui est plus efficace: Plusieurs tables MySQL ou une grande table?

- Je stocker diverses informations utilisateur dans ma base de données MySQL. A l'origine, il a été mis en place dans des tableaux différents sens des données est liée avec les Identifiants et sortie via parfois compliqué d'appels pour afficher et manipuler les données requises. La configuration d'un nouveau système, c'est presque du sens à combiner l'ensemble de ces tables dans une grande table de contenu.

  • Est-ce que ça va être une aide ou un obstacle?
  • Considérations relatives à la vitesse, en l'appelant, mise à jour ou de la recherche/de manipulation?

Voici un exemple d'une partie de mon tableau de structure(s):

  • les utilisateurs - nom d'utilisateur, nom d'utilisateur, email, mot de passe crypté, date d'inscription, ip
  • user_details - cookie de données, le nom, l'adresse, les coordonnées, l'affiliation, de données démographiques
  • user_activity - contributions, dernière ligne, le dernier affichage
  • user_settings - profil des paramètres d'affichage
  • user_interests - publicité pour le ciblage des variables
  • user_levels - les droits d'accès
  • user_stats - hits, correspond à


Edit: j'ai upvoted toutes les réponses jusqu'à présent, ils ont tous les éléments que l'essentiel de répondre à ma question.

La plupart des tableaux ont une relation 1:1 qui a été la raison principale pour denormalising.

Sont ce qu'il y aura des problèmes si le tableau s'étend sur+ de 100 colonnes lorsqu'une grande partie de ces cellules sont susceptibles de rester vide?

79voto

user115905 Points 174

Plusieurs tables à l'aide de la manière suivante / cas:

(a) si des personnes différentes vont être le développement d'applications impliquant des tables différentes, il est logique de les diviser.

(b) Si vous voulez donner différents types d'autorités différentes personnes pour les différentes partie de la collecte de données, il peut être plus pratique de les diviser. (Bien sûr, vous pouvez regarder la définition de points de vue et donner l'autorisation sur eux de façon appropriée).

(c) Pour déplacer des données à différents endroits, en particulier au cours du développement, il peut être judicieux d'utiliser des tableaux résultant dans le fichier de petite taille.

(d) les Petits pieds d'impression peut donner le confort pendant que vous développez des applications sur la collecte des données spécifiques d'une seule entité.

(e) C'est une possibilité: ce que vous avez pensé comme une valeur unique de données peut être vraiment plusieurs valeurs à l'avenir. par exemple, la limite de crédit est un seul champ de valeur désormais. Mais demain, vous pouvez décider de changer les valeurs (date de, date de de crédit, valeur). Fractionner les tables peut être utile maintenant.

Mon vote sera pour plusieurs tables avec les données de manière appropriée split.

Bonne chance.

41voto

Quassnoi Points 191041

En combinant les tables est appelé la dénormalisation.

Il peut (ou non) d'aider à faire de certaines requêtes (qui a beaucoup d' JOINs) pour courir plus vite, au détriment de la création d'un maintien de l'enfer.

MySQL est capable d'utiliser seulement JOIN méthode NESTED LOOPS.

Cela signifie que pour chaque enregistrement dans la table, MySQL localise un enregistrement correspondant dans le tableau dans une boucle.

La localisation d'un enregistrement est assez cher, ce qui peut prendre des dizaines de fois aussi long que le pur enregistrement de la numérisation.

Déplacer tous vos enregistrements dans un tableau vous aidera à se débarrasser de cette opération, mais le tableau lui-même devient plus grand, et l'analyse de la table prend plus de temps.

Si vous avez beaucoup de dossiers dans d'autres tableaux, puis augmenter dans le tableau d'analyse du surpoids avantages de l'registres numérisés de manière séquentielle.

L'entretien de l'enfer, d'autre part, est garanti.

18voto

David Hedlund Points 66192

Sont-ils tous de 1:1 pour les relations? Je veux dire, si un utilisateur peut appartenir à, disons, des niveaux différents de l'utilisateur, ou si les utilisateurs, la représentation des intérêts de plusieurs dossiers dans les intérêts de l'utilisateur table, puis la fusion de ces tableaux serait hors de question immédiatement.

Concernant la réponse à la question précédente au sujet de la normalisation, il faut dire que la base de données des règles de normalisation ont complètement ignoré de la performance, et de ne regarder que ce qui est soigné de la conception de base de données. C'est souvent ce que vous voulez atteindre, mais il y a des moments où il fait sens activement à éliminer, dans la recherche de la performance.

Dans l'ensemble, je dirais que la question se résume à la façon dont de nombreux domaines, il existe dans les tableaux, et combien de fois ils sont accessibles. Si l'activité de l'utilisateur est souvent pas très intéressant, alors il est peut-être juste une nuisance pour l'avoir toujours sur le même registre, pour des performances et des raisons de maintenance. Si certaines données, comme les réglages, par exemple, sont d'un accès très souvent, mais contient tout simplement trop nombreux domaines, il pourrait également ne pas être pratique pour fusionner les tables. Si vous êtes seulement intéressés par le gain de performances, vous pouvez envisager d'autres approches, comme le maintien des paramètres distincts, mais de les enregistrer dans une variable de session de leur propre de sorte que vous n'avez pas à interroger la base de données pour eux très souvent.

7voto

Rudy Garcia Points 337

Pourquoi ne pas utiliser la même approche Wordpress n'en ayant une table des utilisateurs avec les informations utilisateur de base que tout le monde a, puis en ajoutant un "user_meta" table qui peut être n'importe quelle touche, la valeur de la paire associée à l'id de l'utilisateur. Donc, si vous avez besoin de trouver toutes les méta-informations pour l'utilisateur vous pouvez simplement ajouter à votre requête. Vous aussi de ne pas toujours avoir à ajouter de la requête supplémentaire si pas nécessaire pour des choses comme la connexion. L'avantage de cette approche laisse également à votre table ouvert à l'ajout de nouvelles fonctionnalités à vos utilisateurs, telles que le stockage de leurs poignée twitter ou chaque individu d'intérêt. Vous aussi vous n'aurez pas à traiter avec un labyrinthe de code associé est parce que vous avez une table de règles toutes les métadonnées et de vous limiter à une seule association au lieu de 50.

Wordpress spécialement fait cela pour permettre d'ajouter des éléments via des plugins, ce qui permet donc à votre projet d'être plus évolutif et ne nécessite pas une base de données complète refonte si vous avez besoin d'ajouter une nouvelle fonctionnalité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X