2010-09-29 4 views
0

J'ai créé une base de données mysql pour mon projet. J'ai besoin de savoir si ce que j'ai fait est correct ou non.Comment optimiser la table mysql pour une exécution plus rapide

J'ai créé une table principale pour stocker tous les détails de mes films et j'ai créé d'autres tables pour stocker les vues et les classements. Est-ce que je fais mal en utilisant différentes tables pour stocker des vues et des notes, bien que je puisse utiliser la table principale pour stocker des vues et des estimations dans chaque publication.

Si j'ajoute les champs rating et views à la table principale elle-même, est-ce que cela affectera ma base de données? Quelle est la solution optimale?

J'utilise Myisam car de nombreuses requêtes de sélection sont nécessaires à la place de l'insertion.

+0

Besoin d'être plus précis. Optimiser pour quoi? Espace ou temps de réponse? Quel genre de requêtes sont posées à cette base de données. Quel moteur de stockage utilisez-vous InnoDB ou MyISAM? – rkg

+0

C'est une bonne idée de diviser les données et les statistiques. Rappelez-vous que les fonctions agrégées sum, avg etc. sont extrêmement lentes. – iddqd

Répondre

0

Si vous utilisez simplement les champs pour la valeur incrémentielle, vous pouvez utiliser la table principale. Toutefois, si vous souhaitez enregistrer des paramètres supplémentaires dans un vote ou une vue, vous devez utiliser une table secondaire. par exemple. Vous voulez enregistrer quel utilisateur a voté quelle valeur à quelle date. Que vous devriez ajouter une table 'votes' avec les champs: voteId, userId, rating, date. Ensuite, vous pouvez utiliser la fonction AVG pour calculer le vote avarage.

+0

merci pour votre réponse, j'utilise la table supplémentaire pour – pravat231

+0

Pour les grandes tables n'utilisez jamais les fonctions d'agrégation. Calculer des statistiques en ligne ou utiliser un autre stockage/db et utiliser réduire la carte. – iddqd

+0

Ah ok, j'ai oublié de mentionner ça :) – VeeWee

Questions connexes