Question

Je suis en train d'optimiser une base de données Redmine avant qu'il ne soit trop d'une douleur; les changements (essentiellement un journal de toutes les modifications SVN) est à 137000 lignes (ISH) et la table est réglé sur les paramètres par défaut b ase. Pas d'emballage clé etc.

Le tableau se présente comme suit

ID int[11] Auto Inc (PK)
changeset_id int[11]
action varchar[1]
path varchar[255]
from_path varchar[255]
from_revision varchar[255]
revision varchar[255]
branch  varchar[255]

Indices: primaire (ID),
changeset_id réglé sur INDEX BTREE

Tous charset latin1 basé sur un peu d'info de http://forge.mysql.com/ wiki / Top10SQLPerformanceTips

Le tableau moteur est InnoDB Pack touches est réglé par défaut (compacter Omble varchar)

Toutes les autres options sont désactivées.

Quelle est la meilleure façon d'optimiser cela? (Bar troncature; o))

Était-ce utile?

La solution

Il existe des techniques d'optimisation générales pour MySQL: la première serait assurez-vous que vos types de données correspondent aux ABCs (voir ici ). Dépasser puis de haut en bas, ID et changeset_id bien paraître, l'action devrait probablement être char voici tutoriel de base, si vous en avez besoin)

Autres conseils

Il dépend entièrement de votre lecture et d'écriture caractéristiques, à savoir, les requêtes que vous faites, et combien de fois vous écrivez à lui.

La façon d'optimiser l'écriture est de minimiser le nombre d'index. Idéalement, vous utilisez ce que dans le serveur MS SQL serait le « index cluster » avec une clé incrémenter de façon monotone, veiller à ce que vous écrivez de nouveaux records à la fin de la table, et vous écrivez aucun autre indice distinct. Mieux encore, même, est de sauter le SGBD et écrire dans un ancien fichier journal ordinaire de quelque sorte, si vous ne avez pas besoin de capacité transactionnelle.

Pour les requêtes, bien que peut obtenir aussi complexe que vous le souhaitez. Gardez à l'esprit, cependant, que si vous avez besoin d'une quantité importante de données de la table pour une requête (par exemple, il est plus que juste regardant un enregistrement unique basé sur une clé), les analyses de table ne peut pas être une si mauvaise chose. En général, si vous examinez plus de 3-5% du contenu d'une table, un scan de table sera très rapide. Encore une fois, pour cela, un vieux fichier sera probablement plus rapide qu'un SGBD.

Si vous devez optimiser pour les deux, envisager l'optimisation pour l'écriture, puis faire une copie sur une base régulière que vous optimisez pour les requêtes, et de faire les requêtes contre la copie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top