J'ai obtenu une table
users
et un forum, où les utilisateurs peuvent écrire. Chaque action sur le forum utilise la tableusers
. L'utilisateur peut avoir un profil, qui peut être assez grand (50KB). Si je recevais des données aussi volumineuses dans chaque rangée, ne serait-il pas plus rapide d'avoir une table séparée avec les profils de l'utilisateur et d'autres données auxquelles on n'a pas souvent accès? Dans un jeu RPG en ligne, chaque personnage a une longue liste de capacités, par exemple: expérience de pistolets, expérience de mitrailleuses, expérience de lancer de grenades, et 15 autres. Est-il préférable de les stocker dans une chaîne que les nombres séparés par un point-virgule - ce qui prendrait plus d'espace que les entiers, ou devrais-je faire pour chaque capacité domaine individuel? Ou peut-être binaire? (J'utilise C++)Comment la conception des lignes influence-t-elle les performances de MySQL?
Répondre
(1) Non en soi, non. Comme le dit stefan, vous ne devriez sélectionner que ce que vous voulez, alors avoir des choses que vous ne voulez pas dans la table n'est pas un problème. Un blob de 50K TEXT n'est qu'un pointeur dans la rangée.
Cependant, il peut y avoir un problème si vous utilisez des tables MyISAM. Dans MyISAM, il n'y a que le verrouillage au niveau de la table, donc quand un utilisateur met à jour sa ligne (par exemple la dernière heure de visite), il empêche tous les autres utilisateurs d'accéder à la table. Dans ce cas, vous pourriez expérimenter une amélioration en séparant les colonnes fortement mises à jour en une table distincte des colonnes relativement statiques mais fortement sélectionnées.
Mais vous ne voulez pas utiliser MyISAM de toute façon: c'est un peu la merde. Utilisez InnoDB, obtenez le verrouillage au niveau de la ligne (et les transactions, et les contraintes de clé étrangère), et ne vous inquiétez pas. La seule raison d'utiliser les tables MyISAM aujourd'hui est la recherche fulltext, que InnoDB ne supporte pas. (2) Vous devez normalement séparer chaque valeur indépendante dans son propre champ. Si vous rencontrez un problème de performance réel et que vous n'avez pas besoin de manipuler les valeurs au niveau de la base de données, vous pourriez envisager de le dénormaliser, mais vous perdriez la puissance de la base de données.
Si vous ne avez pas besoin des données de colonnes spécifiques, ne l'obtiennent pas. Ne pas faire
SELECT *
maisSELECT a, b,...
Si vous devez faire des requêtes SQL-sur certaines colonnes par exemple
ORDER BY pistols_experience
, vous devriez le laisser dans différentes colonnes. Si vous venez de l'afficher à la fois, vous pouvez sérialiser les différentes paires valeur-clé dans un champ texte via YAML, JSON, etc.
- 1. Conception de MySQL, requête, lignes dubliquées
- 2. performances Mysql et Count (*)
- 3. Conception de MySQL Unique Index
- 4. mysql retourner les lignes correspondant année mois
- 5. MySQL Sélection de lignes Linked
- 6. Déposer des lignes de blob dans des fichiers de MySQL
- 7. Comparaison des performances MySQL et SQL Server Express
- 8. Performances de la requête directe XML vs. MySQL
- 9. mysql sélectionner des lignes impliquant csv
- 10. Ralentissement des performances de SqlDataReader
- 11. Sélectionnez uniquement les lignes uniques dans mysql
- 12. Comment puis-je inclure des lignes de rupture dans les enregistrements mysql?
- 13. Implications des performances d'ORDER BY COALESCE dans MySQL
- 14. Conception MySQL avec nombre dynamique de champs
- 15. Comparaison des performances de la boucle DataTable
- 16. Comment mesurer les performances d'une base de données?
- 17. Modèle de conception Silverlight pour les performances - interface client très riche
- 18. Classement en MySQL, comment obtenir les meilleures performances avec des mises à jour fréquentes et un grand ensemble de données?
- 19. Comment tester les performances des procédures stockées Sybase imbriquées?
- 20. Que ferez-vous pour optimiser les performances de MySQL dans ce cas?
- 21. Sélection de lignes aléatoires dans MySQL
- 22. Amélioration des performances WCF
- 23. Comment obtenir des informations sur les performances de la base de données SQL Server?
- 24. Comment définir la couleur des lignes horizontales entre les lignes d'un gridview asp.net?
- 25. Comparaison des performances de la bibliothèque JavaScript - des ressources disponibles?
- 26. Optimisation des performances de Lucene
- 27. Réglage des performances
- 28. Comment trouver la cause des mauvaises performances du service RESTful?
- 29. ralentissement des performances lors de l'utilisation Unicode
- 30. MySql retournant plusieurs lignes de la procédure stockée/fonction