MySQL
Verdeling
Zoeken…
Opmerkingen
RANGE partitionering . Dit type partitionering wijst rijen toe aan partities op basis van kolomwaarden die binnen een bepaald bereik vallen.
LIJST partitionering . Gelijk aan partitionering door RANGE, behalve dat de partitie is geselecteerd op basis van kolommen die overeenkomen met een van een set discrete waarden.
HASH-partitionering . Bij dit type partitionering wordt een partitie geselecteerd op basis van de waarde die wordt geretourneerd door een door de gebruiker gedefinieerde uitdrukking die werkt op kolomwaarden in rijen die in de tabel moeten worden ingevoegd. De functie kan bestaan uit elke expressie die geldig is in MySQL en een niet-negatieve gehele waarde oplevert. Een uitbreiding op dit type,
LINEAR HASH
, is ook beschikbaar.SLEUTEL partitionering . Dit type partitionering is vergelijkbaar met partitionering door HASH, behalve dat slechts een of meer te evalueren kolommen worden geleverd en de MySQL-server zijn eigen hashfunctie heeft. Deze kolommen kunnen andere dan gehele waarden bevatten, omdat de hashing-functie geleverd door MySQL een geheel getal-resultaat garandeert, ongeacht het gegevenstype van de kolom. Een uitbreiding van dit type,
LINEAR KEY
, is ook beschikbaar.
BEREIK Partitionering
Een tabel die is gepartitioneerd per bereik is zodanig gepartitioneerd dat elke partitie rijen bevat waarvoor de waarde van de partitie-expressie binnen een bepaald bereik ligt. Bereiken moeten aaneengesloten zijn, maar niet overlappen en worden gedefinieerd met de operator VALUES LESS THAN
. Stel voor de volgende voorbeelden dat u een tabel maakt zoals de volgende om personeelsrecords bij te houden voor een keten van 20 videotheken, genummerd van 1 tot en met 20:
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT NOT NULL,
store_id INT NOT NULL
);
Deze tabel kan op verschillende manieren per bereik worden ingedeeld, afhankelijk van uw behoeften. Een manier zou zijn om de kolom store_id
te gebruiken. U kunt bijvoorbeeld besluiten om de tabel op 4 manieren te partitioneren door een PARTITION BY RANGE
clausule toe te voegen, zoals hier wordt weergegeven:
ALTER TABLE employees PARTITION BY RANGE (store_id) (
PARTITION p0 VALUES LESS THAN (6),
PARTITION p1 VALUES LESS THAN (11),
PARTITION p2 VALUES LESS THAN (16),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
MAXVALUE
staat voor een geheel getal dat altijd groter is dan de grootst mogelijke geheel getal (in wiskundige taal dient het als een minimale bovengrens).
gebaseerd op het officiële MySQL-document .
LIJST Partitioneren
Lijstpartitie is in veel opzichten vergelijkbaar met bereikpartitie. Net als bij partitionering door RANGE moet elke partitie expliciet worden gedefinieerd. Het belangrijkste verschil tussen de twee soorten partities is dat bij het partitioneren van lijsten elke partitie wordt gedefinieerd en geselecteerd op basis van het lidmaatschap van een kolomwaarde in een van een set waardelijsten, in plaats van in een set aaneengesloten reeksen van waarden. Dit wordt gedaan door PARTITION BY LIST(expr)
waarbij expr
een kolomwaarde of een uitdrukking op basis van een value_list
is en een geheel getal retourneert, en vervolgens elke partitie definiëren met behulp van VALUES IN (value_list)
, waarbij value_list
een door komma's gescheiden lijst met gehele getallen.
Voor de volgende voorbeelden gaan we ervan uit dat de basisdefinitie van de te partitioneren tabel wordt geleverd door de instructie CREATE TABLE
die hier wordt weergegeven:
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT,
store_id INT
);
Stel dat er 20 videotheken zijn verdeeld over 4 franchises zoals weergegeven in de volgende tabel.
Regio | Winkel ID-nummers |
---|---|
noorden | 3, 5, 6, 9, 17 |
Oosten | 1, 2, 10, 11, 19, 20 |
westen | 4, 12, 13, 14, 18 |
centraal | 7, 8, 15, 16 |
Om deze tabel zodanig te partitioneren dat rijen voor winkels die tot dezelfde regio behoren, in dezelfde partitie worden opgeslagen
ALTER TABLE employees PARTITION BY LIST(store_id) (
PARTITION pNorth VALUES IN (3,5,6,9,17),
PARTITION pEast VALUES IN (1,2,10,11,19,20),
PARTITION pWest VALUES IN (4,12,13,14,18),
PARTITION pCentral VALUES IN (7,8,15,16)
);
gebaseerd op het officiële MySQL-document .
HASH partitionering
Partitionering door HASH wordt voornamelijk gebruikt om een gelijkmatige verdeling van gegevens over een vooraf bepaald aantal partities te garanderen. Bij bereik- of lijstpartitie moet u expliciet opgeven in welke partitie een bepaalde kolomwaarde of een reeks kolomwaarden moet worden opgeslagen; met hashpartitionering zorgt MySQL hiervoor voor u en u hoeft alleen een kolomwaarde of expressie op te geven op basis van een kolomwaarde die moet worden gehasht en het aantal partities waarin de gepartitioneerde tabel moet worden verdeeld.
De volgende instructie maakt een tabel die hashing gebruikt in de kolom store_id en is verdeeld in 4 partities:
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT,
store_id INT
)
PARTITION BY HASH(store_id)
PARTITIONS 4;
Als u geen
PARTITIONS
clausulePARTITIONS
, is het aantal partities standaard 1.
gebaseerd op het officiële MySQL-document .