Partitionierung von mySQL-Tabellen, Fremdschlüssel hat?
Was wäre ein geeigneter Weg, dies zu tun, da mySQL offenbar nicht genießen.
Zu verlassen, entweder partitionieren oder die foreign keys aus der Datenbank-design würde nicht scheinen, wie eine gute Idee für mich. Ich Schätze, dass es eine Abhilfe für dieses?
Update 03/24:
http://opendba.blogspot.com/2008/10/mysql-partitioned-tables-with-trigger.html
Zu behandeln, wie foreign-key-während der Partitionierung
Dank!
- Bounty ist AUF! Mal sehen, ob wir diese Frage wieder lebendig!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es hängt davon ab, inwieweit die Größe der Zeilen in der partitionierten Tabelle ist der Grund für Partitionen notwendig ist.
Wenn die Zeile zu klein ist und der Grund für die Partitionierung ist der schiere Anzahl Zeilen, dann bin ich nicht sicher, was Sie tun sollten.
Wenn Sie die Zeile Größe ist ziemlich groß, dann haben Sie sich Folgendes überlegt:
Lassen
P
werden die partitionierte Tabelle undF
die Tabelle verwiesen, in der Möchtegern-Fremdschlüssel. Erstellen Sie eine neue TabelleX
:und entscheidend, erstellen Sie eine gespeicherte Prozedur für das hinzufügen von Zeilen zur Tabelle
P
. Die gespeicherte Prozedur sollten sicherstellen (Transaktionen), dass, wenn eine Zeile Hinzugefügt wird TabelleP
eine entsprechende Zeile Hinzugefügt TabelleX
. Sie dürfen nicht zulassen, dass Zeilen Hinzugefügt werdenP
in den "normalen" Weg! Sie können nur garantieren, dass die referenzielle Integrität wird gewahrt, wenn Sie halten mit Ihren gespeicherten Prozedur für das hinzufügen von Zeilen. Sie können frei löschen vonP
in der normalen Art und Weise, obwohl.Die Idee hier ist, dass Ihre Tabelle
X
hat ausreichend kleine Zeilen, die Sie hoffentlich nicht benötigen, um die partition, auf der Sie, obwohl es noch viele, viele Zeilen. Der index auf die Tabelle wird dennoch bis ziemlich große Menge an Speicher, glaube ich.Sollte, muss man die Anfrage
P
auf die die foreign key -, Sie wird selbstverständlich AbfrageX
statt, wie das ist, wo der foreign key tatsächlich ist.Constr_X_P_fk
und hinzufügen eines zweiten gespeicherten Prozedur, deren Zweck es ist, zu erlauben, löschen von Zeilen inP
undX
. Natürlich sollten Sie dann sicherstellen, dass alle gelöscht werden durchgeführt unter Verwendung der gespeicherten Prozedur, anstatt mit einer normalenDELETE
- Anweisung.Ich würde stark vorschlagen, Splitter mit Datum als Schlüssel für die Archivierung von Daten Archiv-Tabellen. Wenn Sie brauchen, um einen Bericht aus mehreren Archiv-Tabellen, können Sie mithilfe von Ansichten oder erstellen Sie die Logik in Ihrer Anwendung.
Jedoch mit einem gut strukturierten DB, Sie sollten in der Lage sein zu handhaben, die Dutzende von Millionen von Zeilen in einer Tabelle vor der Partitionierung, oder der Splitter ist wirklich nötig.