MySQL
partitione~~POS=TRUNC
Sök…
Anmärkningar
RANGE partitionering . Denna typ av partitionering tilldelar rader till partitioner baserade på kolumnvärden som faller inom ett givet intervall.
LIST-partitionering . Liknar partitionering med RANGE, förutom att partitionen är vald baserad på kolumner som matchar en av en uppsättning diskreta värden.
HASH-partitionering . Med denna typ av partitionering väljs en partition baserat på värdet som returneras av ett användardefinierat uttryck som fungerar på kolumnvärden i rader som ska infogas i tabellen. Funktionen kan bestå av alla uttryck som är giltiga i MySQL som ger ett icke-negativt heltal. En tillägg till denna typ,
LINEAR HASH
, finns också tillgänglig.KEY-partitionering . Denna typ av partitionering liknar partitionering av HASH, förutom att bara en eller flera kolumner som ska utvärderas tillhandahålls, och MySQL-servern har sin egen hashingfunktion. Dessa kolumner kan innehålla andra värden än heltal eftersom den hashfunktion som tillhandahålls av MySQL garanterar ett heltalresultat oavsett kolumndatatyp. En tillägg till denna typ,
LINEAR KEY
, är också tillgänglig.
RANGE Partitionering
En tabell som är partitionerad efter intervall är partitionerad på ett sådant sätt att varje partition innehåller rader för vilka partitionsuttrycksvärdet ligger inom ett givet intervall. Områdena bör vara sammanhängande men inte överlappande och definieras med hjälp av VALUES LESS THAN
operator. För de följande exemplen antar du att du skapar en tabell som följande för att hålla personalrekord för en kedja med 20 videobutiker, numrerade 1 till 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
);
Denna tabell kan delas upp efter intervall på flera sätt beroende på dina behov. Ett sätt skulle vara att använda kolumnen store_id
. Till exempel kan du välja att dela upp tabellen på 4 sätt genom att lägga till en PARTITION BY RANGE
klausul som visas här:
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
representerar ett heltal som alltid är större än det största möjliga heltalvärdet (i matematiskt språk fungerar det som minst övre gräns).
baserat på officiellt MySQL-dokument .
LIST Partitionering
Listpartitionering liknar intervallpartitionering på många sätt. Som vid partitionering av RANGE måste varje partition definieras uttryckligen. Huvudskillnaden mellan de två typerna av partitioneringar är att varje partition definieras och väljs i listpartitionering baserat på medlemskapet i ett kolumnvärde i en av en uppsättning värdelistor, snarare än i en uppsättning sammanhängande intervall av värden. Detta görs genom att använda PARTITION BY LIST(expr)
där expr
är ett expr
eller ett uttryck baserat på ett kolumnvärde och returnerar ett heltal och sedan definiera varje partition med hjälp av ett VALUES IN (value_list)
, där value_list
är ett kommaseparerad lista över heltal.
För exemplen som följer antar vi att den grundläggande definitionen av tabellen som ska delas upp tillhandahålls av CREATE TABLE
uttalandet som visas här:
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
);
Anta att det finns 20 videobutiker fördelade på 4 franchiseavtal som visas i följande tabell.
Område | Lagra ID-nummer |
---|---|
Norr | 3, 5, 6, 9, 17 |
öst | 1, 2, 10, 11, 19, 20 |
väst | 4, 12, 13, 14, 18 |
Central | 7, 8, 15, 16 |
För att partitionera denna tabell på ett sådant sätt att rader för butiker som tillhör samma region lagras i samma partition
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)
);
baserat på officiellt MySQL-dokument .
HASH-partitionering
Partitionering av HASH används främst för att säkerställa en jämn fördelning av data mellan ett förutbestämt antal partitioner. Med intervall- eller listpartitionering måste du specificera exakt i vilken partition ett visst kolumnvärde eller uppsättning kolumnvärden ska lagras; Med hashpartitionering tar MySQL hand om det här för dig, och du behöver bara ange ett kolumnvärde eller ett uttryck baserat på ett kolumnvärde som ska hashas och antalet partitioner som den partitionerade tabellen ska delas in i.
Följande uttalande skapar en tabell som använder hashing i kolumnen store_id och är indelad i fyra partitioner:
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;
Om du inte inkluderar en
PARTITIONS
klausul är antalet partitioner standardvärde till 1.
baserat på officiellt MySQL-dokument .