Heim  >  Artikel  >  Datenbank  >  MySQL-Mehrfeldpartitionierung

MySQL-Mehrfeldpartitionierung

(*-*)浩
(*-*)浩Original
2019-05-10 13:32:326978Durchsuche

Partitionierung basiert auf bestimmten Regeln. Die Datenbank zerlegt eine Tabelle in mehrere kleinere, besser verwaltbare Teile. Was den Zugriff auf Datenbankanwendungen betrifft, gibt es logischerweise nur eine Tabelle oder einen Index, aber tatsächlich kann diese Tabelle aus N physischen Partitionsobjekten bestehen. Jede Partition ist ein unabhängiges Objekt und kann unabhängig verarbeitet und als Teil verwendet werden der Tabelle zur Bearbeitung. Die Partitionierung ist für die Anwendung völlig transparent und hat keinen Einfluss auf die Geschäftslogik der Anwendung.

Empfohlener Kurs: MySQL-Tutorial.

MySQL-Mehrfeldpartitionierung

Partitionierung ist förderlich für die Verwaltung sehr großer Tabellen. Sie übernimmt die Logik des Teilens und Eroberns und führt das Konzept des Partitionsschlüssels ein Wert gemäß einem bestimmten Intervallwert (oder Bereichswert), einer bestimmten Werteliste oder einem Hash-Funktionswert, um eine Datenaggregation durchzuführen, sodass die Daten gemäß Regeln in verschiedene Partitionen verteilt werden können, sodass ein großes Objekt vorhanden sein kann einige kleine Gegenstände.

MySQL-Partitionierung kann Daten oder Indizes partitionieren.

Hinweis: Unabhängig von der Art der Partitionierung gibt es entweder keinen Primärschlüssel/eindeutigen Schlüssel in Ihrer partitionierten Tabelle, oder der Primärschlüssel/eindeutige Schlüssel der partitionierten Tabelle muss den Partitionsschlüssel enthalten, was bedeutet, dass Sie Es können keine anderen Felder als der Primärschlüssel/eindeutige Schlüssel verwendet werden.

Die Einschränkungen von MySQL-Partitionen umfassen hauptsächlich die folgenden vier Aspekte:

Im Vergleich zu einer einzelnen Festplatten- oder Dateisystempartition können mehr Daten gespeichert werden

Abfragen optimieren. Wenn die Partitionsbedingung in der where-Klausel enthalten ist, können Sie nur eine oder mehrere erforderliche Partitionen gleichzeitig scannen, um die Abfrageeffizienz zu verbessern. Bei Abfragen mit Aggregatfunktionen wie sum () und count () können Sie problemlos scannen Jede Partition Am Ende müssen Sie nur die Ergebnisse aller Partitionen zusammenfassen

Für Daten, die abgelaufen sind oder nicht gespeichert werden müssen, können Sie die Daten schnell löschen, indem Sie die mit diesen Daten verbundenen Partitionen löschen

Über mehrere Festplatten werden Datenabfragen verteilt, um einen höheren Abfragedurchsatz zu erzielen.

Die Partitionierung hat eine ähnliche Funktion wie die horizontale Tabellenpartitionierung. Sie unterteilt die Daten einer großen Tabelle in mehrere kleine Tabellen Die Abfrage erfordert keinen vollständigen Tabellenscan, es müssen nur bestimmte Partitionen gescannt werden, sodass die Partitionierung die Abfragegeschwindigkeit verbessern kann.

Horizontales Sharding erfordert, dass Benutzer im Voraus manuell und explizit mehrere Sharding-Tabellen (z. B. tbl_user0, tbl_user1, tbl_user2) erstellen und mehrere Tabellen physisch über den Client-Agenten (Sharding-JDBC usw.) oder den Middleware-Agenten erstellen ( Mycat usw.), um die Tabellenaufteilungslogik zu implementieren.

Partition ist eine Plug-in-Funktion von MySQL, die die Daten einer großen Tabelle in mehrere Partitionsdateien am Ende der Datenbank aufteilt (z. B. tbl_user#P#p0.ibd, tbl_user#P#p1). .ibd, tbl_user#P #p2.ibd) erfordert im Gegensatz zur horizontalen Partitionierung keine explizite Erstellung von „Partitionierungstabellen“. Der Benutzer sieht lediglich eine normale Tabelle, die tatsächlich entspricht Mehrere Partitionen sind abgeschirmt und für Benutzer transparent. Die Verwendung entspricht genau der Verwendung einer Tabelle und erfordert keine Implementierung von Funktionen. Partition ist eine logische horizontale Tabelle, aber auf der physischen Ebene handelt es sich immer noch um eine Tabelle.

Vor mysql5.5 unterstützten Bereichspartitionierung und Listenpartitionierung nur die Ganzzahlpartitionierung, und eine Ganzzahl konnte durch zusätzliche Funktionsoperationen oder zusätzliche Konvertierungen erhalten werden. Die Spaltenpartition ist in Bereichsspalten und Listenspalten unterteilt und unterstützt drei Hauptdatentypen: Ganzzahl (Tinyint bis Bigint, Dezimalzahl und Gleitkommazahl werden nicht unterstützt), Datum (Datum, Datum/Uhrzeit) und Zeichenfolge (Char, Varchar, Binär, Varbinary). ).

Die Spaltenpartitionierung unterstützt ein oder mehrere Felder als Partitionierungsschlüssel, jedoch keine Ausdrücke als Partitionierungsschlüssel. Dies unterscheidet sich von der Bereichs- und Listenpartitionierung. Es ist zu beachten, dass der Vergleich der Bereichsspalten-Partitionsschlüssel auf einem Tupelvergleich basiert, d. h. auf einem Feldgruppenvergleich, der sich von der Bereichspartitionierung unterscheidet.

 create talbe rc3 (    
    a int,
    b int
)
partition by range columns(a, b) (
    partition p01 values less than (0, 10),
    partition p02 values less than (10, 10),
    partition p03 values less than (10, 20),
    partition p04 values less than (10, 35),
    partition p05 values less than (10, maxvalue),
    partition p06 values less than (maxvalue, maxvalue),
);

insert into rc3(a, b) values(1, 10);

select (1, 10) < (10, 10) from dual;

-- 根据结果存放到p02分区上了
select
    partition_name,
    partition_expression,
    partition_description,
    table_rows
from information_schema.partitions
where table_schema = schema() and table_name = 'rc3';

Der Vergleich der Bereichsspalten-Partitionsschlüssel (Vergleich von Tupeln) ist eigentlich eine mehrspaltige Sortierung, wobei zuerst nach dem a-Feld und dann nach dem b-Feld sortiert wird, wobei die Daten entsprechend dem Sortierergebnis partitioniert werden , und Bereichseinzelfeldpartitionierung Die Regeln für die Sortierung sind tatsächlich dieselben.






















Das obige ist der detaillierte Inhalt vonMySQL-Mehrfeldpartitionierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn