Spec-Zone .ru
спецификации, руководства, описания, API

17.2.3.2. LIST COLUMNS разделение

MySQL 5.7 оказывает поддержку для LIST COLUMNS разделение. Это - разновидность LIST разделение, которое позволяет использованию многократных столбцов как ключи раздела, и для столбцов типов данных кроме целочисленных типов использоваться в качестве разделения столбцов; можно использовать строковые типы, DATE, и DATETIME столбцы. (Для получения дополнительной информации о разрешенных типах данных для COLUMNS разделение столбцов, см. Раздел 17.2.3,"COLUMNS Разделение".)

Предположите, что у Вас есть бизнес, у которого есть клиенты в 12 городах, которые, для продаж и маркетинговых целей, Вы организуете в 4 области 3 городов каждого как показано в следующей таблице:

Область Города
1 Оскаршамн, Högsby, Mönsterås
2 Виммерби, Hultsfred, Västervik
3 Nässjö, Eksjö, Ветланда
4 Uppvidinge, Алвеста, Växjo

С LIST COLUMNS разделение, можно составить таблицу для данных о клиентах, которая присваивает строку любому из 4 разделов, соответствующих этим областям, основанным на имени города, где клиент находится, как показано здесь:

CREATE TABLE customers_1 (    first_name VARCHAR(25),    last_name VARCHAR(25),    street_1 VARCHAR(30),    street_2 VARCHAR(30),    city VARCHAR(15),    renewal DATE)PARTITION BY LIST COLUMNS(city) (    PARTITION pRegion_1 VALUES IN('Oskarshamn', 'Högsby', 'Mönsterås'),    PARTITION pRegion_2 VALUES IN('Vimmerby', 'Hultsfred', 'Västervik'),    PARTITION pRegion_3 VALUES IN('Nässjö', 'Eksjö', 'Vetlanda'),    PARTITION pRegion_4 VALUES IN('Uppvidinge', 'Alvesta', 'Växjo'));

Как с разделением RANGE COLUMNS, Вы не должны использовать выражения в COLUMNS() пункт, чтобы преобразовать значения столбцов в целые числа. (Фактически, с использованием выражений кроме имен столбцов не разрешают COLUMNS().)

Также возможно использовать DATE и DATETIME столбцы, как показано в следующем примере, который использует то же самое имя и столбцы как customers_1 таблица, показанная ранее, но, использует LIST COLUMNS разделение основанного на renewal столбец, чтобы сохранить строки в одном из 4 разделов в зависимости от недели в феврале 2010 учетная запись клиента, как планируют, возобновит:

CREATE TABLE customers_2 (    first_name VARCHAR(25),    last_name VARCHAR(25),    street_1 VARCHAR(30),    street_2 VARCHAR(30),    city VARCHAR(15),    renewal DATE)PARTITION BY LIST COLUMNS(renewal) (    PARTITION pWeek_1 VALUES IN('2010-02-01', '2010-02-02', '2010-02-03',        '2010-02-04', '2010-02-05', '2010-02-06', '2010-02-07'),    PARTITION pWeek_2 VALUES IN('2010-02-08', '2010-02-09', '2010-02-10',        '2010-02-11', '2010-02-12', '2010-02-13', '2010-02-14'),    PARTITION pWeek_3 VALUES IN('2010-02-15', '2010-02-16', '2010-02-17',        '2010-02-18', '2010-02-19', '2010-02-20', '2010-02-21'),    PARTITION pWeek_4 VALUES IN('2010-02-22', '2010-02-23', '2010-02-24',        '2010-02-25', '2010-02-26', '2010-02-27', '2010-02-28'));

Это работает, но становится громоздким, чтобы определить и поддержать, если число включенных дат становится очень большим; в таких случаях это обычно более практично, чтобы использовать RANGE или RANGE COLUMNS разделение вместо этого. В этом случае начиная со столбца мы хотим использовать, поскольку ключ разделения является a DATE столбец, мы используем RANGE COLUMNS разделение, как показано здесь:

CREATE TABLE customers_3 (    first_name VARCHAR(25),    last_name VARCHAR(25),    street_1 VARCHAR(30),    street_2 VARCHAR(30),    city VARCHAR(15),    renewal DATE)PARTITION BY RANGE COLUMNS(renewal) (    PARTITION pWeek_1 VALUES LESS THAN('2010-02-09'),    PARTITION pWeek_2 VALUES LESS THAN('2010-02-15'),    PARTITION pWeek_3 VALUES LESS THAN('2010-02-22'),    PARTITION pWeek_4 VALUES LESS THAN('2010-03-01'));

См. Раздел 17.2.3.1,"RANGE COLUMNS разделение", для получения дополнительной информации.

Кроме того (как с RANGE COLUMNS деля), можно использовать многократные столбцы в COLUMNS() пункт.

См. Раздел 13.1.14,"CREATE TABLE Синтаксис", для дополнительной информации о PARTITION BY LIST COLUMNS() синтаксис.