2010-02-01 10 views
14

Ich habe eine MySQL-Datenbanktabelle, die ich nach Datum partitionieren möchte, insbesondere nach Monat & Jahr. Wenn jedoch neue Daten für einen neuen Monat hinzugefügt werden, möchte ich die Datenbank nicht manuell aktualisieren müssen.mysql Datenbank automatische Partitionierung

Wenn ich zuerst meine Datenbank erstelle, habe ich Daten in Nov 09, Dec 09, Jan 10, usw. Jetzt, wenn Februar beginnt, möchte ich eine Feb 10 Partition automatisch erstellt. Ist das möglich?

+0

Ich bin mir nicht sicher, ob dies die beste Idee ist. Jedes Mal, wenn Sie Partitionen ändern, überschreiben Sie im Prinzip die gesamte Tabelle. Dies kann ziemlich viel Zeit und Ressourcen kosten. – Mchl

+0

@Mchl wenn du eine bessere Idee hast, würde ich mich freuen, es zu hören. Du hast recht, es ist ziemlich intensiv (mehr als ich möchte), aber wenn es nur einmal im Monat läuft, ist es nicht so schlimm - vor allem wenn ich regelmäßige Abfragen wie "Wähle den 3. Tag des letzten Monats" machen muss. – Benubird

+3

"Jedes Mal, wenn Sie Partitionen ändern, überschreiben Sie im Prinzip die gesamte Tabelle": überhaupt nicht wahr. Das Hinzufügen von Partitionen oder das Entfernen von Partitionen ist wie das Erstellen/Löschen einer Tabelle. Im Wesentlichen sofort. Nur das Ändern einer vorhandenen Partition *, die bereits Daten enthält * ist möglicherweise langsam. Wenn Sie also eine neue Partition für den nächsten Monat erstellen, bevor Sie Daten darin einfügen, ist das sehr schnell. – jssebastian

Antwort

3

Es gibt ein paar Lösungen gibt, wenn Sie eine Gesamtlösung wollen, diese post out on kickingtyres überprüfen. Es ist eine grundlegende Kombination einer gespeicherten Prozedur, die die Partitionsanalyse und -erstellung behandelt (mit etwas Protokollierung!).

Alles, was Sie tun müssen, ist, es an Ihren Partitionstyp anzupassen (das Beispiel verwendet eine bigint-Partition) und den Ablauf für die Ausführung mit dem MySQL Event Scheduler zu planen.

+0

Ich mag das Konzept der gespeicherten Prozedur für die Partitionserstellung. –

+8

Kickingtyres Link ist kaputt. –

+0

Ich habe den Link mit einer archive.org Kopie aktualisiert – Benjamin

1

ja, könnten Sie die verbesserte Partitionierung Funktionalität in 5.5:

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

+0

+1 großer Link ... danke –

+0

Müsste ich jeden Monat einen Trigger einrichten, um eine neue Partition für diesen Monat hinzuzufügen? Da ich nicht alle Monate/Jahre im Voraus definieren möchte ... –

+1

@Jeff - Ich glaube nicht, nichts ist in diesem Artikel trotzdem notiert. Das sind großartige Verbesserungen, aber werden Ihr aktuelles Problem nicht lösen ... Eines, dem ich gegenüberstand, als SQL Server zu Beginn auch Partitionen hinzufügte, PITA sicher. –

1

Ich werde tun, was die anderen getan (einen Link) Quick Introdunction to MySQL Partitioning

(sehen Sie Seite 50 für das, was Sie brauchen - Partition nach Datum) Edit: Ich las Ihren Beitrag genauer - wenn Sie ändern möchten, Partitionen von Monat, warum erstellen Sie nicht ein Mysql event das tut das

+2

Beantwortet die Frage nicht. – Benubird

+0

Ich bin eine Suggestion. Aber ich denke, dass Sie mit einem Ereignis und einer gespeicherten Prozedur enden werden, um zu tun, was Sie wollen. – cristian