Die Tabellenpartitionierung unterscheidet sich von der Datenbankpartitionierung. Worauf sollten wir also bei der Verwendung der Tabellenpartitionierung achten? Heute werden wir uns die Details der Tabellenpartitionierung von MySQL-Datenbanken ansehen. 1. Einschränkungen für Partitionsspaltenindizes Wenn die Tabelle einen Primärschlüssel oder einen eindeutigen Schlüssel hat, muss die Partitionsspalte der Partitionstabelle in der Primärschlüssel- oder eindeutigen Schlüsselliste enthalten sein. Dadurch wird die Effizienz des Primärschlüssels sichergestellt. Andernfalls wird es problematisch, wenn sich die Elemente im selben Primärschlüsselbereich jeweils in Partition A und Partition B befinden. 2. Bedingungen für jeden Partitionstyp Bereich: Jede Partition enthält die Zeilen, deren Werte des Partitionierungsausdrucks innerhalb eines gegebenen zusammenhängenden Intervalls liegen. Diese Intervalle müssen zusammenhängend sein und dürfen sich nicht überschneiden. Liste unterstützt nur ganzzahlige Felder oder Ausdrücke, die Ganzzahlen zurückgeben. Die Werteliste in jeder Partitionsliste muss eine Ganzzahl sein. Der Hash-Typ unterstützt nur Ganzzahlfelder oder Ausdrücke, die Ganzzahlen zurückgeben. Der Schlüsseltyp unterstützt nur Spaltennamen (einen oder mehrere Spaltennamen) und keine Ausdrücke. 3. Verfügbare Funktionen partitionieren ABS() CEILING() (siehe CEILING() und FLOOR(), unmittelbar im Anschluss an diese Liste) TAG() DAYOFMONTH() DAYOFWEEK() TAG DES JAHRES() DATEDIFF() EXTRAKT() FLOOR() (siehe CEILING() und FLOOR(), unmittelbar im Anschluss an diese Liste) STUNDE() MIKROSEKUNDE() MINUTE() MOD() MONAT() QUARTAL() ZWEITE() ZEIT_BIS_SEC() TO_DAYS() WOCHENTAG() JAHR() JAHRWOCHE() Beachten: Da die Partitionsfunktion die Funktion FROM_UNIXTIME nicht enthält, ist eine Partitionierung durch Konvertieren von Zeitstempeln in Uhrzeiten nicht möglich. Sie können nur nach Datum oder Datum/Uhrzeit partitionieren. Beispielsweise können wir nach Jahr Folgendes verwenden: PARTITION NACH BEREICH (JAHR(Datum)) Nach Monat: PARTITION NACH BEREICH (Datum Div 100) #div konvertiert das Datum in eine Ganzzahl, zum Beispiel: 2014-12-01 -> 20141201, 100 entfernt zwei Ziffern am Ende und das Endergebnis ist 201412 Ein Beispiel für die Partitionierung nach Reihenfolge: CREATE TABLE `Reihenfolge` ( `order_id` bigint(19) NOT NULL DEFAULT '0' COMMENT 'Bestell-ID: Jahr, Monat, Tag, Stunde, Minute, Sekunde, 12-stellige, 7-stellige Zufallszahl', `date` Datum NICHT NULL STANDARD '0000-00-00' KOMMENTAR 'Bestelldatum', `amount` int(11) DEFAULT NULL COMMENT 'Zahlungsbetrag in Cent', `status` tinyint(1) DEFAULT '0' COMMENT '0: Warte auf Zahlung 1: Zahlung erfolgreich 2: Zahlung fehlgeschlagen 3: Verifizierung fehlgeschlagen', `addtime` int(10) DEFAULT NULL COMMENT 'Zeit zum Hinzufügen der Reihenfolge', PRIMÄRSCHLÜSSEL (`Bestell-ID`,`Datum`) )ENGINE=MyISAM STANDARD-CHARSET=utf8; Da wir keine Zeitstempel zur Partitionierung nach Zeit verwenden können, fügen wir ein Datumsfeld hinzu. Dieses Feld und die Bestell-ID werden als Primärschlüssel verwendet. Wir wissen, dass die Partitionsspalte im Primärschlüssel enthalten sein muss. Als nächstes verwenden wir das Datum, um die Jahr-Monat-Kombination zu berechnen und zu partitionieren ALTER TABLE Reihenfolge PARTITION BY RANGE (Datum DIV 100) ( PARTITION p_2014_06 WERTE WENIGER ALS (201407), PARTITION p_2014_07 WERTE WENIGER ALS (201408), PARTITION p_2014_08 WERTE WENIGER ALS (201409), PARTITION p_2014_09 WERTE WENIGER ALS (201410), PARTITION p_2014_10 WERTE KLEINER ALS (201411), PARTITION p_catch_all WERTE KLEINER ALS MAXIMALER WERT ); Im obigen Beispiel legt LESS THAN MAXVALUE die letzte Partition p_catch_all fest, sodass Sie mit der Methode add keine Partitionen hinzufügen können. Die folgenden Anweisungen sind nicht verfügbar: Sie können nur die letzte p_catch_all-Partition in zwei Teile aufteilen. Dies hat den Vorteil, dass die Daten in der p_catch_all-Partition nicht verloren gehen. Das Zusammenführen und Aufteilen der Daten erfolgt mit REORGANIZE PARTITION. Tabellenreihenfolge ändern, Partition p_catch_all neu organisieren in ( Partition p_2014_11 Werte kleiner als (201412), Partition p_catch_all-Werte kleiner als der Maximalwert ); Partitionen zusammenführen: Tabellenreihenfolge ändern, Partition neu organisieren p_2014_10,p_2014_11,p_catch_all in ( Partition p_catch_test-Werte kleiner als MAXVALUE ); Warum weisen Sie es nicht p_catch_all zu? Weil die Existenz der Partition gemeldet wird. Warum müssen wir beim Zusammenführen die letzte Partition p_catch_all einschließen? Denn mit Ausnahme der letzten Partition können die neu organisierten Partitionsbereiche den Gesamtbereich nicht ändern. Tabelle ändern Tabellenname Partitionierung entfernen Hinweis: Die obige Anweisung kann in 5.5 ausgeführt werden, aber in 5.6 scheint es ein Problem zu geben. Sie müssen es zuerst testen Wenn nach der Partitionierung die Where-Bedingung ein Bereich ist, funktioniert die Partitionierung nicht, z. B. Where Date >= '2014-01-01' und Date <= '2014-01-31' Ergänzung: Vier Partitionstypen von MySQL-Tabellen 1. Was ist Tabellenpartitionierung? Im Allgemeinen besteht die Tabellenpartitionierung darin, eine große Tabelle je nach Bedingungen in mehrere kleine Tabellen aufzuteilen. MySQL 5.1 begann, die Partitionierung von Datentabellen zu unterstützen. Wenn eine Benutzertabelle beispielsweise mehr als 6 Millionen Datensätze enthält, kann die Tabelle entsprechend dem Speicherdatum oder dem Speicherort partitioniert werden. Selbstverständlich kann die Partitionierung auch auf Grundlage anderer Bedingungen erfolgen. 2. Warum die Tabelle partitionieren? Zur Verbesserung der Skalierbarkeit, Verwaltbarkeit und Steigerung der Datenbankeffizienz für große Tabellen und Tabellen mit unterschiedlichen Zugriffsmustern. Zu den Vorteilen der Partitionierung gehören: Kann mehr Daten speichern als eine einzelne Festplatte oder Dateisystempartition. Bei Daten, deren Speicherung ihren Sinn verloren hat, ist es normalerweise einfach, sie zu löschen, indem man die mit den Daten verknüpften Partitionen löscht. Umgekehrt kann in einigen Fällen das Hinzufügen neuer Daten bequem durch das Hinzufügen einer neuen Partition speziell für diese neuen Daten implementiert werden. Zu den weiteren Vorteilen, die üblicherweise mit der Partitionierung verbunden werden, zählen die unten aufgeführten. Diese Funktionen der MySQL-Partitionierung sind noch nicht implementiert, stehen aber ganz oben auf unserer Prioritätenliste; wir hoffen, sie in die Produktionsversion 5.1 integrieren zu können. Einige Abfragen können erheblich optimiert werden, vor allem dadurch, dass die Daten, die eine bestimmte WHERE-Klausel erfüllen, in einer oder mehreren Partitionen gespeichert werden, sodass bei der Suche die anderen verbleibenden Partitionen nicht durchsucht werden müssen. Da Partitionen nach der Erstellung einer partitionierten Tabelle geändert werden können, können Sie Ihre Daten neu organisieren, um die Effizienz häufig verwendeter Abfragen zu verbessern, falls Sie dies bei der ersten Konfiguration des Partitionierungsschemas nicht getan haben. Abfragen mit Aggregatfunktionen wie SUM() und COUNT() können problemlos parallelisiert werden. Ein einfaches Beispiel für eine solche Abfrage ist „SELECT salesperson_id, COUNT (orders) as order_total FROM sales GROUP BY salesperson_id;“. „Parallel“ bedeutet, dass die Abfrage auf allen Partitionen gleichzeitig ausgeführt werden kann und das Endergebnis einfach durch die Summierung der Ergebnisse aller Partitionen erhalten wird. Durch die Verteilung der Datenabfragen auf mehrere Datenträger können Sie einen höheren Abfragedurchsatz erzielen. 3. Partitionstyp RANGE-Partitionierung: Weisen Sie Partitionen mehrere Zeilen basierend auf Spaltenwerten zu, die in ein bestimmtes kontinuierliches Intervall fallen. LIST-Partitionierung: Ähnlich wie die RANGE-Partitionierung, der Unterschied besteht darin, dass die LIST-Partitionierung auf dem Spaltenwert basiert, der mit einem Wert in einem diskreten Wertesatz übereinstimmt. HASH-Partitionierung: Die Auswahl einer Partition erfolgt anhand des Rückgabewerts eines benutzerdefinierten Ausdrucks, der aus den Spaltenwerten der in die Tabelle einzufügenden Zeilen berechnet wird. Diese Funktion kann jeden in MySQL gültigen Ausdruck enthalten, der einen nicht negativen ganzzahligen Wert erzeugt. KEY-Partitionierung: Ähnlich wie HASH-Partitionierung, der Unterschied besteht darin, dass die KEY-Partitionierung nur die Berechnung einer oder mehrerer Spalten unterstützt und der MySQL-Server eine eigene Hash-Funktion bereitstellt. Eine oder mehrere Spalten müssen ganzzahlige Werte enthalten. RANGE-Partitionierung Weist mehrere Zeilen Partitionen basierend auf Spaltenwerten zu, die in ein bestimmtes zusammenhängendes Intervall fallen. Diese Intervalle müssen kontinuierlich und nicht überlappend sein und werden mit dem Operator „VALUES LESS THAN“ definiert. Nachfolgend finden Sie Beispiele. SQL-Code: CREATE TABLE Mitarbeiter ( id INT NICHT NULL, fname VARCHAR(30), lname VARCHAR(30), eingestellt DATUM NICHT NULL STANDARD '1970-01-01', getrenntes DATUM NICHT NULL DEFAULT '9999-12-31', job_code INT NICHT NULL, store_id INT NICHT NULL ) Partition nach Bereich (Store-ID) ( Partition p0 Werte kleiner als (6), Partition p1 Werte kleiner als (11), Partition p2 Werte kleiner als (16), Partition p3 WERTE KLEINER ALS (21) ); Gemäß diesem Partitionierungsschema werden alle Zeilen, die den in den Filialen 1 bis 5 arbeitenden Mitarbeitern entsprechen, in Partition P0 gespeichert, Mitarbeiter, die in den Filialen 6 bis 10 arbeiten, werden in P1 gespeichert und so weiter. Beachten Sie, dass jede Partition der Reihe nach definiert ist, von der niedrigsten bis zur höchsten. Dies ist eine Anforderung der PARTITION BY RANGE-Syntax; in dieser Hinsicht ähnelt es einer „switch ... case“-Anweisung in C oder Java. Für eine neue Zeile mit den Daten (72, ‚Michael‘, ‚Widenius‘, ‚1998-06-25‘, NULL, 13) lässt sich leicht bestimmen, dass sie in die Partition p2 eingefügt wird. Was passiert jedoch, wenn ein Speicher mit der Nummer 21 hinzugefügt wird? Da es in diesem Szenario keine Regel zum Einschließen von Geschäften mit einer Store-ID größer als 20 gibt, weiß der Server nicht, wo die Zeile gespeichert werden soll, was zu einem Fehler führt. Sie können diesen Fehler vermeiden, indem Sie in der CREATE TABLE-Anweisung eine „Catchall“-Klausel VALUES LESS THAN verwenden, die alle Werte abfängt, die größer sind als der höchste Wert, den Sie explizit angeben: SQL-Code: CREATE TABLE Mitarbeiter ( id INT NICHT NULL, fname VARCHAR(30), lname VARCHAR(30), eingestellt DATUM NICHT NULL STANDARD '1970-01-01', getrenntes DATUM NICHT NULL DEFAULT '9999-12-31', job_code INT NICHT NULL, store_id INT NICHT NULL ) PARTITION NACH BEREICH (store_id) ( PARTITION p0 WERTE KLEINER ALS (6), PARTITION p1 WERTE KLEINER ALS (11), PARTITION p2 WERTE WENIGER ALS (16), PARTITION p3 WERTE WENIGER ALS MAXIMALER WERT ); MAXVALUE stellt den größtmöglichen ganzzahligen Wert dar. Jetzt werden alle Zeilen mit Store_ID-Spaltenwerten größer oder gleich 16 (dem höchsten definierten Wert) in Partition p3 gespeichert. Wenn die Anzahl der Filialen irgendwann auf 25, 30 oder mehr angewachsen ist, können Sie mit der Anweisung ALTER TABLE neue Partitionen für die Filialen 21-25, 26-30 usw. hinzufügen. In fast derselben Struktur können Sie die Tabelle auch basierend auf dem Jobcode des Mitarbeiters partitionieren, das heißt basierend auf aufeinanderfolgenden Intervallen von Werten in der Spalte „job_code“. Beispiel: Angenommen, zweistellige Berufscodes werden zur Darstellung von allgemeinen (Laden-)Mitarbeitern, dreistellige Codes für Büro- und Hilfspersonal und vierstellige Codes für das Management verwendet. Dann können Sie die partitionierte Tabelle mit der folgenden Anweisung erstellen: SQL-Code: CREATE TABLE Mitarbeiter ( id INT NICHT NULL, fname VARCHAR(30), lname VARCHAR(30), eingestellt DATUM NICHT NULL STANDARD '1970-01-01', getrenntes DATUM NICHT NULL DEFAULT '9999-12-31', job_code INT NICHT NULL, store_id INT NICHT NULL ) PARTITION NACH BEREICH (Jobcode) ( PARTITION p0 WERTE KLEINER ALS (100), PARTITION p1 WERTE WENIGER ALS (1000), PARTITION p2 WERTE WENIGER ALS (10000) ); In diesem Beispiel werden alle Zeilen, die sich auf Ladenmitarbeiter beziehen, in Partition p0 gespeichert, alle Zeilen, die sich auf Büro- und Hilfspersonal beziehen, in Partition p1 und alle Zeilen, die sich auf das Management beziehen, in Partition p2. Es ist auch möglich, einen Ausdruck in der VALUES LESS THAN-Klausel zu verwenden. Die wichtigste Einschränkung besteht hier darin, dass MySQL in der Lage sein muss, den im Rahmen des LESS THAN (<)-Vergleichs zurückgegebenen Ausdruck auszuwerten. Daher kann der Ausdruck nicht als NULL ausgewertet werden. Aus diesem Grund wurden die Spalten „hired“, „separat“, „job_code“ und „store_id“ der Mitarbeitertabelle als NOT NULL definiert. Zusätzlich zur Möglichkeit, die Tabellendaten basierend auf der Filialnummer aufzuteilen, können Sie zum Aufteilen der Tabellendaten auch einen Ausdruck basierend auf einem von zwei DATE (Datum) verwenden. Angenommen, Sie möchten die Tabelle basierend auf dem Jahr partitionieren, in dem jeder Mitarbeiter das Unternehmen verlassen hat, also dem Wert von YEAR(separated). Ein Beispiel für eine CREATE TABLE-Anweisung, die dieses Partitionierungsschema implementiert, ist wie folgt: SQL-Code: CREATE TABLE Mitarbeiter ( id INT NICHT NULL, fname VARCHAR(30), lname VARCHAR(30), eingestellt DATUM NICHT NULL STANDARD '1970-01-01', getrenntes DATUM NICHT NULL DEFAULT '9999-12-31', job_code INT, Store-ID INT ) PARTITION NACH BEREICH (JAHR(getrennt)) ( PARTITION p0 WERTE WENIGER ALS (1991), PARTITION p1 WERTE WENIGER ALS (1996), PARTITION p2 WERTE WENIGER ALS (2001), PARTITION p3 WERTE WENIGER ALS MAXIMALER WERT ); In diesem Schema werden die Datensätze aller vor 1991 eingestellten Mitarbeiter in Partition p0 gespeichert, die Datensätze aller zwischen 1991 und 1995 eingestellten Mitarbeiter in Partition p1, die Datensätze aller zwischen 1996 und 2000 eingestellten Mitarbeiter in Partition p2 und Informationen zu allen nach 2000 eingestellten Arbeitnehmern in Partition p3. Hinweis: Diese Optimierung ist im MySQL 5.1-Quellcode noch nicht aktiviert; daran wird jedoch gearbeitet. LIST-Partition Ähnlich wie bei der Partitionierung nach RANGE besteht der Unterschied darin, dass die LIST-Partitionierung auf dem Spaltenwert basiert, der mit einem Wert in einem diskreten Wertesatz übereinstimmt. Die LIST-Partitionierung wird mithilfe von „PARTITION BY LIST(Ausdruck)“ implementiert, wobei „Ausdruck“ ein Spaltenwert oder ein auf einem Spaltenwert basierender Ausdruck ist, der einen ganzzahligen Wert zurückgibt. Anschließend wird jede Partition durch „VALUES IN (Werteliste)“ definiert, wobei „Werteliste“ eine durch Kommas getrennte Liste ganzer Zahlen ist. Hinweis: Ab MySQL 5.1 ist es bei Verwendung der LIST-Partitionierung möglich, nur Listen mit ganzen Zahlen abzugleichen. SQL-Code: CREATE TABLE Mitarbeiter ( id INT NICHT NULL, fname VARCHAR(30), lname VARCHAR(30), eingestellt DATUM NICHT NULL STANDARD '1970-01-01', getrenntes DATUM NICHT NULL DEFAULT '9999-12-31', job_code INT, Store-ID INT ); Nehmen wir an, dass es 20 audiovisuelle Geschäfte mit Vertriebsrechten in 4 Regionen gibt, wie in der folgenden Tabelle dargestellt: ==================== Regionale Filial-ID-Nummer Nordbezirk 3, 5, 6, 9, 17 Ostbezirk 1, 2, 10, 11, 19, 20 Westbezirk 4, 12, 13, 14, 18 Zentralbezirk 7, 8, 15, 16 ==================== Um die Tabelle so zu partitionieren, dass Zeilen, die zu Geschäften in der gleichen Region gehören, in der gleichen Partition gespeichert werden, können Sie die folgende „CREATE TABLE“-Anweisung verwenden: SQL-Code: CREATE TABLE Mitarbeiter ( id INT NICHT NULL, fname VARCHAR(30), lname VARCHAR(30), eingestellt DATUM NICHT NULL STANDARD '1970-01-01', getrenntes DATUM NICHT NULL DEFAULT '9999-12-31', job_code INT, Store-ID INT ) PARTITION NACH LIST(store_id) PARTITION pNorth WERTE IN (3,5,6,9,17), PARTITION pEast-WERTE IN (1,2,10,11,19,20), PARTITION pWest WERTE IN (4,12,13,14,18), PARTITION pCentral WERTE IN (7,8,15,16) ); Auf diese Weise können Mitarbeiterdatensätze für eine bestimmte Region problemlos zur Tabelle hinzugefügt oder daraus gelöscht werden. Nehmen wir zum Beispiel an, alle Videotheken auf der West Side würden an andere Unternehmen verkauft. Anschließend können alle Datensätze (Zeilen) der in der Videothek im West District tätigen Mitarbeiter mit der Abfrage „ALTER TABLE employees DROP PARTITION pWest;“ gelöscht werden. Dies ist wesentlich effizienter als die DELETE-Abfrage „DELETE query DELETE FROM employees WHERE store_id IN (4,12,13,14,18);“, die dieselbe Wirkung hat. [Wichtige Punkte]: Wenn Sie versuchen, eine Zeile einzufügen, deren Spaltenwert (oder der Rückgabewert des Partitionierungsausdrucks) nicht in der Partitionswertliste enthalten ist, schlägt die „INSERT“-Abfrage fehl und meldet einen Fehler. Wenn beispielsweise das obige Schema für die LIST-Partitionierung verwendet wird, schlägt die folgende Abfrage fehl: SQL-Code: INSERT INTO Mitarbeiter VALUES (224, „Linus“, „Torvalds“, „01.05.2002“, „12.10.2004“, 42, 21); Dies liegt daran, dass der Spaltenwert 21 „store_id“ nicht in der Liste der Werte gefunden werden kann, die zum Definieren der Partitionen pNorth, pEast, pWest oder pCentral verwendet werden. Es ist wichtig zu beachten, dass LIST-Partitionen keine Definitionen wie „VALUES LESS THAN MAXVALUE“ haben, die andere Werte einschließen. Jeder übereinstimmende Wert muss in der Werteliste gefunden werden. HASH-Partition Die Partitionen werden basierend auf dem Rückgabewert eines benutzerdefinierten Ausdrucks ausgewählt, der mithilfe von Spaltenwerten für die in die Tabelle einzufügenden Zeilen ausgewertet wird. Diese Funktion kann jeden in MySQL gültigen Ausdruck enthalten, der einen nicht negativen ganzzahligen Wert erzeugt. Um eine Tabelle mithilfe der HASH-Partitionierung zu partitionieren, fügen Sie der CREATE TABLE-Anweisung eine Klausel „PARTITION BY HASH (Ausdruck)“ hinzu, wobei „Ausdruck“ ein Ausdruck ist, der eine Ganzzahl zurückgibt. Es kann sich einfach um den Namen einer Spalte handeln, deren Feldtyp eine MySQL-Ganzzahl ist. Darüber hinaus müssen Sie höchstwahrscheinlich eine „PARTITIONS num“-Klausel dahinter hinzufügen, wobei num eine nicht negative Ganzzahl ist, die die Anzahl der Partitionen darstellt, in die die Tabelle aufgeteilt wird. SQL-Code: CREATE TABLE Mitarbeiter ( id INT NICHT NULL, fname VARCHAR(30), lname VARCHAR(30), eingestellt DATUM NICHT NULL STANDARD '1970-01-01', getrenntes DATUM NICHT NULL DEFAULT '9999-12-31', job_code INT, Store-ID INT ) PARTITION NACH HASH(store_id) PARTITIONEN 4; Wenn Sie keine PARTITIONS-Klausel einschließen, beträgt die Anzahl der Partitionen standardmäßig 1. Ausnahme: Bei NDB-Clustertabellen entspricht die Standardanzahl der Partitionen der Anzahl der Cluster-Datenknoten. Bei dieser Korrektur werden wahrscheinlich alle MAX_ROWS-Einstellungen berücksichtigt, um sicherzustellen, dass alle Zeilen in die Partitionen passen. LINER HASH MySQL unterstützt auch lineares Hashing. Dieses unterscheidet sich vom regulären Hashing dadurch, dass beim linearen Hashing ein linearer Zweierpotenzalgorithmus verwendet wird, während beim regulären Hashing der Modul des Hashfunktionswerts verwendet wird. Der einzige Unterschied in der Syntax zwischen linearer Hash-Partitionierung und regulärer Hash-Partitionierung ist das Hinzufügen des Schlüsselworts „LINEAR“ in der Klausel „PARTITION BY“. SQL-Code: CREATE TABLE Mitarbeiter ( id INT NICHT NULL, fname VARCHAR(30), lname VARCHAR(30), eingestellt DATUM NICHT NULL STANDARD '1970-01-01', getrenntes DATUM NICHT NULL DEFAULT '9999-12-31', job_code INT, Store-ID INT ) PARTITION NACH LINEAR HASH(JAHR(eingestellt)) PARTITIONEN 4; Angenommen, es gibt einen Ausdruck expr. Wenn Sie die lineare Hash-Funktion verwenden, ist die Partition, in der der Datensatz gespeichert wird, Partition N von num Partitionen, wobei N gemäß dem folgenden Algorithmus ermittelt wird: 1. Suchen Sie die nächste Zweierpotenz, die größer als num ist. Diesen Wert nennen wir V, und er lässt sich mit der folgenden Formel ermitteln: 2. V = POWER(2, CEILING(LOG(2, num))) (Angenommen, num ist 13. Dann ist LOG(2,13) 3,7004397181411. CEILING(3,7004397181411) ist 4, dann ist V = POWER(2,4), was gleich 16 ist). 3. Setzen Sie N = F(Spaltenliste) und (V – 1). 4. Wenn N >= Num: Setzen Sie V = CEIL(V / 2) Setzen Sie N = N und (V – 1) Angenommen, Tabelle t1 wird mit linearer Hash-Partitionierung und mit 4 Partitionen durch die folgende Anweisung erstellt: CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATE) PARTITION BY LINEAR HASH( YEAR(col3) ) PARTITIONS 6; Nehmen wir nun an, Sie möchten zwei Zeilen in Tabelle t1 einfügen, einen Datensatz mit dem Spaltenwert col3 „2003-04-14“ und den anderen Datensatz mit dem Spaltenwert col3 „1998-10-19“. Die Partition, auf die der erste Datensatz gespeichert wird, wird wie folgt bestimmt: V = Power (2, Decke (log (2,7)) = 8 n = Jahr ('2003-04-14') & (8-1) = 2003 & 7 = 3 (3> = 6 ist falsch: V.-2). 8-1) = 1998 & 7 = 6 (6> = 4 ist wahr: Zusätzliche Schritte sind erforderlich) n = 6 & Decke (5/2) = 6 & 3 = 2 (2> = 4 ist falsch: Die Aufzeichnung wird in Partition Nr. 2 gespeichert) Der Vorteil des Vorteils der linearen Hash-Partitionierung ist, dass das Hinzufügen, Löschen, Verschmelzung und Aufspalten von Teilen von GIGLIGS FASTRY-NEFFISIFIFFISCHE FÜHRLICH FÜHREN FÜHREN FÜHREN FÜHREN FÜHREN FÜHREN FÜHREN FÜHLUNG FÜHREN FÜHREN FÜR DIE AUSGEBETRICHTEN, EXTRIGUINGS EURGENTEMEN (GARBETRIGUNGSEN). Der Nachteil besteht darin, dass die Datenverteilung zwischen den Partitionen im Vergleich zur Datenverteilung bei herkömmlicher HASH-Partitionierung wahrscheinlich nicht ausgewogen ist. KEY-Partition Ähnlich wie bei der HASH-Partitionierung besteht der Unterschied darin, dass die KEY-Partitionierung nur die Berechnung einer oder mehrerer Spalten unterstützt und der MySQL-Server seine eigene Hash-Funktion bereitstellt. Eine oder mehrere Spalten müssen ganzzahlige Werte enthalten. SQL-Code: TABELLE ERSTELLEN tk ( col1 INT NICHT NULL, col2 CHAR(5), Spalte 3 DATUM ) PARTITION NACH LINEAREM SCHLÜSSEL (Spalte 1) PARTITIONEN 3; Die Verwendung des Schlüsselworts LINEAR bei der KEY-Partitionierung hat dieselbe Wirkung wie bei der HASH-Partitionierung. Die Partitionsnummer wird durch den Zweierpotenzalgorithmus und nicht durch den Moduloalgorithmus ermittelt. Zusammenfassen Dies ist der gesamte Inhalt dieses Artikels zu den Vorsichtsmaßnahmen bei der Partitionierung von MySQL-Datenbanktabellen. Interessierte Freunde können Folgendes nachlesen: So löschen Sie MySQL-Tabellendaten, mehrere wichtige MySQL-Variablen, Beispielanalyse zur Optimierung von MySQL-Unterabfragen und verschachtelten Abfragen usw. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie bitte eine Nachricht. Jeder ist herzlich eingeladen, zu kommunizieren und zu diskutieren. Das könnte Sie auch interessieren:
|
<<: Eine kurze Diskussion über die Kerneloptimierung mit hoher Parallelität bei Nginx10m+
>>: Verwenden Sie JavaScript, um Seiteneffekte zu erstellen
Inhaltsverzeichnis 1. Ist setState synchron? asyn...
Laden Sie zuerst das komprimierte Nacos-Paket von...
Was ist NFS? Netzwerkdateisystem Eine Methode ode...
Inhaltsverzeichnis Vorwort: Spezifische Operation...
1. Setzen Sie den HTML-Code der Maskenebene und d...
1. Übersicht Es gibt drei Möglichkeiten, ein Dock...
1. Komponenten installieren yum install epel-rpm-...
Verwenden Sie CSS, um eine 3D-Fotowand zu erstell...
Inhaltsverzeichnis 1. Schnittstellendefinition 2....
Beim Entwickeln mobiler Apps stoßen Sie häufig au...
Vorwort Wenn die HTML-Struktur einer Seite viele ...
1. Herunterladen https://dev.mysql.com/downloads/...
Nach einer langen Zeit der Transplantation und In...
Code kopieren Der Code lautet wie folgt: <inpu...
Inhaltsverzeichnis Vorwort: 1. Verstehen Sie Lock...