22.2.3.2 Разбиение по столбцам LIST
MySQL 5.7 поддерживает разбиение по столбцам LIST. Это разновидность разбиения по столбцам, которая позволяет использовать несколько столбцов в качестве ключей разбиения и столбцы с типами данных, отличными от целочисленных, в качестве столбцов разбиения; вы можете использовать строковые типы, DATE и DATETIME столбцы. (Дополнительную информацию о разрешенных типах данных для столбцов разбиения см. в Разделе 22.2.3, «Разбиение по столбцам».)
Предположим, что у вас есть бизнес с клиентами в 12 городах, которые для целей продаж и маркетинга вы организуете в 4 региона по 3 города в каждом, как показано в следующей таблице:
| Регион | Города |
|---|---|
| 1 | Оскаршемн, Хёгсби, Мёнстерас |
| 2 | Виммерби, Хюльсфред, Вестервик |
| 3 | Нэссё, Эксьё, Ветланда |
| 4 | Уппвидинге, Альвеста, Вэксё |
С помощью разбиения по столбцам LIST вы можете создать таблицу для данных о клиентах, которая присваивает строку любому из 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. В этом случае, поскольку столбец, который мы хотим использовать в качестве ключа разбиения, является 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')
);
Дополнительную информацию см. в Разделе 22.2.3.1, «Разбиение по диапазонам столбцов».
Кроме того (как и при разбиении по RANGE COLUMNS), вы можете использовать несколько столбцов в предложении COLUMNS().
Дополнительную информацию о синтаксисе PARTITION BY LIST COLUMNS() см. в Разделе 13.1.18, «Оператор CREATE TABLE».
© 2025 Oracle
Licensed under the GPLv2 License.