2011-06-20 4 views
0

Je cherche à réarchiver une application existante et je me demande comment gérer au mieux les tables.Comment puis-je partitionner les données annuelles dans MySQL?

Actuellement, nous avons un tableau par année (data_2009, data_2010, etc.). La plupart des requêtes sont effectuées uniquement par année - sélectionnez somme (ventes) à partir de data_2010 où user = 10, par exemple.

Chaque année a environ 1 million de rangées; nous avons 10 ans jusqu'à maintenant, et nous sommes susceptibles de continuer indéfiniment.

De temps en temps, cependant, les calculs devraient être effectués à tout moment. Ceci est actuellement mal géré par un tableau récapitulatif séparé qui est exécuté une fois par an et qui contient des lignes pour chaque mois pour chaque utilisateur (et est ensuite additionné/compté etc. avec l'année en cours). Cela a diverses limitations et j'aimerais abandonner l'idée d'un tableau récapitulatif.

Vaut-il mieux avoir une grande table et créer des vues pour chaque année? Ou rester avec des tables séparées et avoir une vue pour tous les temps? par exemple, une vue qui est

select * from data_2005 union select * from data_2006 etc.

Une question est de savoir comment les index seront traités - si j'ai un index sur le champ "utilisateur", par exemple, est utilisé dans l'un ou l'autre scénario?

Répondre

1

Utilisez une table mais utilisez la partition et la partition de table sur l'année. En savoir plus sur se trouve partitionnement ici

http://dev.mysql.com/doc/refman/5.1/en/partitioning.html

+0

Puis-je sélectionner par des partitions spécifiques ou dois-je comprendre la date varie chaque fois? par exemple. fait "select * from data_2010 où user = 10" devient nécessairement "select * from data where user = 10 et date> = '2011-04-01' et date <= '2012-05-01'" (J'utilise année financière, pas année civile malheureusement)? – Apemantus

+0

Oui c'est correct, vous travailleriez avec une table mais mysql gérerait les tables individuelles "sous le capot". Extrait du manuel mySQL: "Partitionnement ... vous permettant de distribuer des portions de tables individuelles sur un système de fichiers selon des règles que vous pouvez définir en grande partie selon vos besoins.En effet, différentes parties d'une table sont stockées dans des tables distinctes à différents emplacements" . Je voudrais encore partitionner sur l'année civile pour la simplicité plutôt que d'essayer de partitionner en fonction de l'année financière. –

Questions connexes