2010-02-01 4 views
14

J'ai une table de base de données mysql que je veux partitionner par date, en particulier par mois & année. Cependant, lorsque de nouvelles données sont ajoutées pour un nouveau mois, je ne veux pas avoir besoin de mettre à jour manuellement la base de données. Lorsque je crée initialement ma base de données, j'ai des données dans Nov 09, Dec 09, Jan 10, etc Maintenant, quand février commence, j'aimerais une partition de 10 février créée automatiquement. Est-ce possible?base de données mysql partitionnement automatique

+0

Je ne sais pas si c'est la meilleure idée. Chaque fois que vous modifiez des partitions, vous allez essentiellement réécrire la totalité de la table. Cela peut prendre beaucoup de temps et de ressources. – Mchl

+0

@Mchl si vous avez une meilleure idée, je serais heureux de l'entendre. Tu as raison, c'est assez intensif (plus que je ne le voudrais), mais si ça ne fonctionne qu'une fois par mois ce n'est pas trop mal - surtout quand j'ai besoin de faire des requêtes régulières comme 'sélectionner le 3ème jour du mois dernier'. – Benubird

+3

"Chaque fois que vous modifiez des partitions, vous allez essentiellement réécrire toute la table": pas du tout vrai. Ajouter des partitions ou supprimer des partitions revient à créer/supprimer une table. Essentiellement instantané. Seule la modification d'une partition existante * contenant déjà des données * est potentiellement lente. Donc, si vous créez une nouvelle partition pour le mois prochain avant d'y insérer des données, c'est très rapide. – jssebastian

Répondre

3

Il y a quelques solutions là-bas, si vous voulez une solution complète, vérifier post out on kickingtyres. C'est une combinaison basique d'une procédure stockée gérant l'analyse et la création de partition (avec un peu de journalisation!). Tout ce que vous devez faire est de l'ajuster à votre type de partition (l'exemple utilise une partition bigint) et planifier la procédure à exécuter avec le planificateur d'événements MySQL.

+0

J'aime le concept de la procédure stockée pour la création de partition. –

+8

Le lien de kickingtyres est cassé. –

+0

J'ai mis à jour le lien avec une archive.org copie – Benjamin

1

oui, vous pourriez aimer la fonctionnalité de partitionnement améliorée dans 5.5:

http://dev.mysql.com/tech-resources/articles/mysql_55_partitioning.html

+0

+1 super lien ... merci –

+0

Aurais-je besoin de configurer un déclencheur chaque mois pour ajouter une nouvelle partition pour ce mois? Puisque je ne veux pas définir tous les mois/années à l'avance ... –

+1

@Jeff - Je ne crois pas, rien noté dans cet article de toute façon. Ce sont d'excellentes améliorations, mais cela ne résoudra pas votre problème actuel ... celui auquel j'ai été confronté lorsque SQL Server a ajouté des partitions au début, PITA à coup sûr. –

1

Je ferai ce que l'autre fait (poster un lien) Quick Introdunction to MySQL Partitioning

(voir page 50 pour ce que vous avez besoin - partition par date) Edit: Je relis votre message plus attentivement - si vous voulez changer partitions par mois pourquoi ne pas créer un Mysql event qui fait cela

+2

Ne répond pas à la question. – Benubird

+0

I est une suggestion. Mais je pense que vous allez vous retrouver avec un événement et une procédure stockée pour faire ce que vous voulez. – cristian

Questions connexes