Szukaj…


Uwagi

  • Podział ZAKRESU . Ten typ partycjonowania przypisuje wiersze do partycji na podstawie wartości kolumn mieszczących się w danym zakresie.

  • Podział LIST . Podobne do partycjonowania według RANGE, z tym wyjątkiem, że partycja jest wybierana na podstawie kolumn pasujących do jednego z zestawu wartości dyskretnych.

  • Partycjonowanie HASH . W przypadku tego rodzaju partycjonowania partycja jest wybierana na podstawie wartości zwróconej przez wyrażenie zdefiniowane przez użytkownika, które działa na wartościach kolumn w wierszach, które mają zostać wstawione do tabeli. Funkcja może składać się z dowolnego wyrażenia poprawnego w MySQL, które daje nieujemną liczbę całkowitą. Dostępne jest również rozszerzenie tego typu, LINEAR HASH .

  • KLUCZOWE partycjonowanie . Ten typ partycjonowania jest podobny do partycjonowania przez HASH, z tym wyjątkiem, że dostarczana jest tylko jedna lub więcej kolumn do oceny, a serwer MySQL zapewnia własną funkcję haszującą. Te kolumny mogą zawierać wartości inne niż liczby całkowite, ponieważ funkcja mieszająca dostarczana przez MySQL gwarantuje wynik w postaci liczby całkowitej niezależnie od typu danych kolumny. Dostępne jest również rozszerzenie tego typu, LINEAR KEY .

ZAKRES Partycjonowanie

Tabela podzielona według zakresu jest podzielona na partycje w taki sposób, że każda partycja zawiera wiersze, dla których wartość wyrażenia podziału mieści się w danym zakresie. Zakresy powinny być ciągłe, ale nie zachodzić na siebie, i są definiowane za pomocą operatora VALUES LESS THAN . W kilku kolejnych przykładach załóżmy, że tworzysz tabelę, taką jak poniżej, do przechowywania danych osobowych dla sieci 20 sklepów wideo, o numerach od 1 do 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
);

Ta tabela może być podzielona na partycje na wiele sposobów, w zależności od potrzeb. Jednym ze sposobów byłoby użycie kolumny store_id . Na przykład możesz zdecydować o podzieleniu tabeli na 4 sposoby, dodając klauzulę PARTITION BY RANGE , jak pokazano tutaj:

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 reprezentuje wartość całkowitą, która jest zawsze większa od największej możliwej wartości całkowitej (w języku matematycznym służy jako minimum górnej granicy).

na podstawie oficjalnego dokumentu MySQL .

LISTY Partycjonowanie

Partycjonowanie listy jest pod wieloma względami podobne do partycjonowania zakresu. Podobnie jak w przypadku partycjonowania przez RANGE, każda partycja musi być wyraźnie zdefiniowana. Główna różnica między dwoma typami partycjonowania polega na tym, że w partycjonowaniu list każda partycja jest definiowana i wybierana na podstawie przynależności wartości kolumny do jednego z zestawu list wartości, a nie do jednego z zestawu ciągłych zakresów wartości. Odbywa się to za pomocą PARTITION BY LIST(expr) gdzie expr jest wartością kolumny lub wyrażeniem opartym na wartości kolumny i zwraca wartość całkowitą, a następnie definiuje każdą partycję za pomocą VALUES IN (value_list) , gdzie value_list jest oddzielona przecinkami lista liczb całkowitych.

W poniższych przykładach zakładamy, że podstawowa definicja tabeli, która ma zostać podzielona na partycje, jest podana tutaj w instrukcji CREATE TABLE :

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
);

Załóżmy, że istnieje 20 sklepów wideo dystrybuowanych wśród 4 franczyz, jak pokazano w poniższej tabeli.

Region Przechowuj numery identyfikacyjne
Północ 3, 5, 6, 9, 17
Wschód 1, 2, 10, 11, 19, 20
Zachód 4, 12, 13, 14, 18
Centralny 7, 8, 15, 16

Aby podzielić tę tabelę w taki sposób, że wiersze dla sklepów należących do tego samego regionu są przechowywane na tej samej partycji

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)
);

na podstawie oficjalnego dokumentu MySQL .

Partycjonowanie HASH

Partycjonowanie przez HASH służy przede wszystkim do zapewnienia równomiernego podziału danych między określoną z góry liczbą partycji. W przypadku partycjonowania zakresu lub listy należy wyraźnie określić, na której partycji ma zostać zapisana dana wartość kolumny lub zestaw wartości kolumn; w przypadku partycjonowania skrótów MySQL dba o to za Ciebie i musisz jedynie podać wartość kolumny lub wyrażenie na podstawie wartości kolumny, która ma zostać zaszyfrowana, oraz liczby partycji, na które podzielona zostanie podzielona na partycje tabela.

Poniższa instrukcja tworzy tabelę, która używa skrótów w kolumnie store_id i jest podzielona na 4 partycje:

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;

Jeśli nie uwzględnisz klauzuli PARTITIONS , domyślnie liczba partycji wynosi 1.

na podstawie oficjalnego dokumentu MySQL .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow