2010-05-09 3 views
4

Je travaille sur un RPG basé sur un navigateur pour l'un de mes sites Web, et j'essaie actuellement de déterminer la meilleure façon d'organiser mes tables SQL pour la performance et la maintenance.Détermination de la meilleure structure de table pour les performances MySQL

Voici ma question:

Le nombre de colonnes dans une table SQL affecte la vitesse à laquelle on peut se demander? Je ne suis pas un novice quand il s'agit de PHP ou MySQL. J'avais l'habitude de développer des choses avec l'objectif commun de les faire travailler, mais j'ai récemment avancé à l'étape où un programme fonctionnel n'est pas assez bon à moins que ce soit rapide et fiable.

De toute façon, maintenant j'ai une table members qui a environ 15 colonnes. Il contient des informations telles que le nom d'utilisateur, le mot de passe, le courrier électronique, les connexions, les pages vues, etc. du lecteur. Cependant, il ne contient aucune information sur les progrès du joueur dans le jeu. Si j'ajoutais des colonnes pour des choses telles que la taille de l'armée, l'or, les tours, et autres joyeusetés, alors il pourrait facilement s'élever à environ 40 ou 50 colonnes au total. Oh, et la structure de ma base de données EST normalisée.

Une table de 50 colonnes qui est constamment interrogée est-elle une mauvaise idée? Dois-je le diviser en deux tables; un pour les informations générales de l'utilisateur et un pour les statistiques de jeu de l'utilisateur? Je sais que je pourrais vérifier l'heure de la requête moi-même, mais je n'ai pas encore créé les tables et je pense que je serais mieux avec quelques conseils professionnels sur cette décision importante pour mon jeu.

Nous vous remercions de votre temps! :)

Répondre

5

Le nombre de colonnes peut avoir un coût mesurable si vous comptez sur des analyses de table ou sur des pages de mise en cache de données de table. Mais la meilleure façon d'obtenir de bonnes performances est de créer index pour répondre à vos questions. Si vous avez des index en place qui profitent à vos requêtes, la largeur d'une ligne dans la table est pratiquement sans conséquence. Vous recherchez des lignes spécifiques grâce à des moyens beaucoup plus rapides que de parcourir la table.

Voici quelques ressources pour vous:

En fonction de votre mise en garde à la fin de votre question, vous savez déjà que vous devriez mesurer la performance et seulement le code de fixation qui a des problèmes. N'essayez pas de faire des optimisations prématurées.

Malheureusement, il n'existe pas de règle unique pour la définition d'index. Le meilleur ensemble d'index doit être personnalisé pour les requêtes dont vous avez besoin pour être le plus rapide. C'est un travail difficile, qui nécessite beaucoup d'analyses, de tests et de mesures comparatives pour la performance. Il faut aussi beaucoup de lecture pour comprendre comment votre technologie RDBMS utilise des index.

+0

Merci de m'avoir fourni ces ressources. Puisque je vais presque toujours interroger la table pour rechercher l'identifiant de l'utilisateur (qui est la clé primaire), alors il ne devrait pas y avoir de problème pour moi d'avoir beaucoup de colonnes basées sur votre réponse. Merci encore, maintenant je peux poursuivre mon développement. :) –

Questions connexes