Vorwort In einem aktuellen Projekt mussten wir eine große Datenmenge speichern, und diese Daten haben ein Ablaufdatum. Um die Abfrageeffizienz zu verbessern und abgelaufene Daten schnell zu löschen, haben wir uns für den MySQL-Partitionierungsmechanismus entschieden. Partitionieren Sie die Daten nach Zeit. Partitionstyp
- Bereichspartitionierung: Die am häufigsten verwendete Methode ist die Zuweisung mehrerer Zeilen zu Partitionen basierend auf Spaltenwerten, die zu einem bestimmten kontinuierlichen Intervall gehören. Die häufigste basiert auf dem Zeitfeld. Die partitionsbasierte Spalte ist vorzugsweise eine Ganzzahl. Wenn es sich um einen Datumstyp handelt, kann eine Funktion verwendet werden, um sie in eine Ganzzahl umzuwandeln.
- Listenpartition: Die LIST-Partition ähnelt der RANGE-Partition. Der Unterschied besteht darin, dass LIST eine Sammlung von Aufzählungswertlisten und RANGE eine Sammlung von kontinuierlichen Intervallwerten ist.
- Hash-Partitionierung: Basierend auf der angegebenen Anzahl von Partitionen werden die Daten verschiedenen Partitionen zugewiesen. Bei der Hash-Partitionierung können Hash-Operationen nur auf Ganzzahlen angewendet werden. Nicht ganzzahlige Felder können nur durch Ausdrücke in Ganzzahlen umgewandelt werden.
- Schlüsselpartitionierung: Die KEY-Partitionierung ähnelt der HASH-Partitionierung, weist jedoch folgende Unterschiede auf:
- Die KEY-Partitionierung lässt mehrere Spalten zu, während die HASH-Partitionierung nur eine Spalte zulässt.
- Wenn ein Primärschlüssel oder eindeutiger Schlüssel vorhanden ist, kann die Partitionsspalte im Schlüssel nicht angegeben werden. Der Standardwert ist der Primärschlüssel oder eindeutige Schlüssel. Wenn nicht, muss die Spalte explizit angegeben werden.
- Das KEY-Partitionsobjekt muss eine Spalte sein und darf kein auf einer Spalte basierender Ausdruck sein.
- Die Algorithmen für KEY-Partitionierung und HASH-Partitionierung sind unterschiedlich. Bei PARTITION BY HASH (expr) ist der MOD-Wert der von expr zurückgegebene Wert, während er bei PARTITION BY KEY (column_list) auf dem MD5-Wert der Spalte basiert.
Partitionsbefehle
Erstellen einer Partition
Tabelle „access_log“ erstellen (
`id` int(11) NICHT NULL AUTO_INCREMENT,
`access_time` datetime NICHT NULL,
PRIMÄRSCHLÜSSEL (`id`,`access_time`)
) ENGINE=InnoDB STANDARD-CHARSET=utf8
/*!50100 PARTITION NACH BEREICH (bis_Tage(Zugriffszeit))
(PARTITION p1 WERTE WENIGER ALS (to_days(20190101)) ENGINE = InnoDB,
PARTITION p2 WERTE WENIGER ALS (to_days(20190102)) ENGINE = InnoDB,
PARTITION p3 WERTE WENIGER ALS (to_days(20190103)) ENGINE = InnoDB) */; Nach der Erstellung können Sie sehen, dass jede Partition einer IBD-Datei entspricht  Partitionstabelle
Hinzufügen einer neuen Partition
Tabelle ändern access_log Partition hinzufügen(
Partition p4-Werte kleiner als (to_days('20190105'))
); Löschen einer Partition
Tabelle ändern Access_Log, Partition p1 löschen; Aufteilen einer Partition
Ändern Sie die Tabelle access_log und reorganisieren Sie die Partition p4 in (
-> Partition s0-Werte kleiner als (to_days('20190104')),
-> Partition s1-Werte kleiner als (to_days('20190105'))
-> ); Partitionen zusammenführen
Tabelle „access_log“ ändern, Partition s0,s1 neu organisieren in (
Partition p4-Werte kleiner als (to_days('20190105'))
); Vorsichtsmaßnahmen
- Wenn in der MySQL-Partition ein Primärschlüssel oder eindeutiger Schlüssel vorhanden ist, muss die Partitionsspalte darin enthalten sein (andernfalls müssen alle Partitionen gescannt werden, um den Primärschlüssel oder eindeutigen Schlüssel zu bestimmen).
- Das Partitionsfeld darf nicht NULL sein. Wie lässt sich sonst der Partitionsbereich bestimmen? Versuchen Sie daher, NOT NULL zu verwenden.
- Die maximale Anzahl von Partitionen darf 1024 nicht überschreiten
- Fremdschlüssel werden nicht unterstützt
- Es können nur ganzzahlige Spalten der Datentabelle partitioniert werden, oder die Datenspalte kann durch die Partitionsfunktion in eine ganzzahlige Spalte umgewandelt werden
- Partitionstabellen haben keinen Einfluss auf Auto-Increment-Spalten
Häufig gestellte Fragen
- Ein PRIMÄRSCHLÜSSEL muss alle Spalten in der Partitionierungsfunktion der Tabelle enthalten: Auf diese Weise kann die Bestimmung, ob der Primärschlüssel eindeutig ist, innerhalb einer einzigen Partition abgeschlossen werden, andernfalls muss sie über alle Partitionen hinweg abgeschlossen werden.
- MAXVALUE kann nur in der letzten Partitionsdefinition verwendet werden: Eine RANGE-Tabelle kann nach der Partitionierung keine MAXVALUE-Partition haben, da andernfalls keine Partitionen hinzugefügt werden können. Oder Sie partitionieren es einfach neu.
Ändern Sie die Access_Log-Partition der Tabelle nach Bereich (bis_Tage(Zugriffszeit))(
Partition p1-Werte kleiner als (to_days('20191202')),
Partition p2-Werte kleiner als (to_days('20191203')),
Partitions-PO-Werte kleiner als (Maximalwert)
) - Tabelle hat keine Partition für Wert 737425: weil der Partitionsbereich nicht alle möglichen Datensatzwerte enthält
siehe - MySQL · Best Practices · Grundlegende Partitionstabellentypen
- Warum verwenden Internetunternehmen keine MySQL-Partitionstabellen?
- So beheben Sie den Fehler 1481 (HY000): MAXVALUE kann nur in der letzten Partitionsdefinition verwendet werden
Zusammenfassen Dies ist das Ende dieses Artikels über das grundlegende Einführungstutorial zur MySQL-Partitionstabelle. Weitere relevante Inhalte zur MySQL-Partitionstabelle finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:- Ein Leistungsfehler bei MySQL-Partitionstabellen
- Detaillierte Erläuterung der Verwendung und der zugrunde liegenden Prinzipien von MySQL-Tabellenpartitionen
- Erste Schritte mit MySQL Sharding
- Ausführliche Erläuterung der Kenntnisse zu MySql-Tabellen, Datenbanken, Sharding und Partitionierung
- Detaillierte Erklärung der MySQL-Partitionstabelle
- MySQL Best Practices: Grundlegende Arten von Partitionstabellen
- Best Practices-Handbuch für partitionierte MySQL-Tabellen
- Richtiger Einsatz von MySQL-Partitionstabellen
- Detaillierte Erläuterung der Einschränkungen und Beschränkungen von MySQL-partitionierten Tabellen
- MySQL partitioniert vorhandene Tabellen in der Datentabelle
|