Поиск…


замечания

  • RANGE . Этот тип разбиения присваивает строки разбиениям на основе значений столбцов, попадающих в заданный диапазон.

  • LIST . Подобно разделу с помощью RANGE, за исключением того, что раздел выбирается на основе столбцов, соответствующих одному из множества дискретных значений.

  • Хэш-разделение . При таком типе разбиения раздел выбирается на основе значения, возвращаемого определяемым пользователем выражением, которое работает со значениями столбцов в строках, которые должны быть вставлены в таблицу. Функция может состоять из любого выражения, действительного в MySQL, которое дает неотрицательное целочисленное значение. Также доступно расширение для этого типа, LINEAR HASH .

  • KEY . Этот тип разбиения похож на разбиение на разделы с помощью HASH, за исключением того, что предоставляется только один или несколько столбцов, которые будут оцениваться, а сервер MySQL предоставляет собственную функцию хэширования. Эти столбцы могут содержать не целочисленные значения, так как функция хэширования, предоставленная MySQL, гарантирует целочисленный результат независимо от типа данных столбца. Также доступно расширение для этого типа, LINEAR KEY .

Разделение разделов

Таблица, разбитая по диапазону, разбивается на разделы таким образом, что каждый раздел содержит строки, для которых значение выражения секционирования находится в заданном диапазоне. Диапазоны должны быть смежными, но не перекрывающимися, и определяются с помощью оператора VALUES LESS THAN . Для следующих нескольких примеров предположим, что вы создаете таблицу, такую ​​как нижеследующая, для хранения записей персонала для цепочки из 20 хранилищ видео, пронумерованных от 1 до 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
);

В зависимости от ваших потребностей эта таблица может быть разделена по диапазону несколькими способами. Один из способов - использовать столбец store_id . Например, вы можете решить разбить таблицу 4 путем добавления предложения PARTITION BY RANGE , как показано ниже:

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 представляет собой целочисленное значение, которое всегда больше, чем наибольшее возможное целочисленное значение (в математическом языке оно служит наименьшей верхней границей).

основанный на официальном документе MySQL .

Разделение списка

Пересечение списков во многом сходно с разбиением по диапазонам. Как и в разделении по RANGE, каждый раздел должен быть явно определен. Основное различие между двумя типами разбиения состоит в том, что при разбиении списка каждый раздел определяется и выбирается на основе членства значения столбца в одном из наборов списков значений, а не в одном из множества смежных диапазонов ценности. Это делается с помощью PARTITION BY LIST(expr) где expr - значение столбца или выражение на основе значения столбца и возвращающее целочисленное значение, а затем определение каждого раздела с помощью VALUES IN (value_list) , где value_list является список целых чисел, разделенных запятыми.

В следующих примерах мы предполагаем, что базовое определение таблицы, которая будет разбита на разделы, предоставляется приведенным здесь инструкцией 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
);

Предположим, что имеется 20 магазинов видео, распределенных между 4 франшизами, как показано в следующей таблице.

Область, край Идентификационные номера магазинов
к северу 3, 5, 6, 9, 17
восток 1, 2, 10, 11, 19, 20
запад 4, 12, 13, 14, 18
центральный 7, 8, 15, 16

Чтобы разбить эту таблицу таким образом, чтобы строки для хранилищ, принадлежащих к одному региону, были сохранены в одном разделе

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

основанный на официальном документе MySQL .

Разделение HASH

Разделение по HASH используется в первую очередь для обеспечения равномерного распределения данных между предопределенным количеством разделов. С диапазоном или разбиением списка вы должны явно указывать, в какой раздел необходимо сохранить заданное значение столбца или набор значений столбцов; с хэш-разбиением, MySQL позаботится об этом для вас, и вам нужно указать только значение столбца или выражение на основе значения столбца, которое должно быть хэшировано, и количества разделов, в которые разделена разделенная таблица.

Следующий оператор создает таблицу, которая использует хэширование в столбце store_id и делится на 4 раздела:

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;

Если вы не включаете предложение PARTITIONS , количество разделов по умолчанию равно 1.

основанный на официальном документе MySQL .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow