Spec-Zone.ru › MySQL 8.4

26.2.3.2 Разбиение по столбцам LIST

MySQL 8.4 поддерживает разбиение по столбцам LIST. Это вариант разбиения по столбцам LIST, который позволяет использовать несколько столбцов в качестве ключей разбиения и столбцы типов данных, отличных от целочисленных, в качестве столбцов разбиения; вы можете использовать строковые типы, DATE и DATETIME столбцы. (Дополнительную информацию о разрешённых типах данных для столбцов разбиения по столбцам LIST см. в разделе 26.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().)

Также можно использовать DATE и DATETIME столбцы, как показано в следующем примере, использующем те же имя и столбцы, что и таблица customers_1, показанная ранее, но использующим разбиение по столбцам LIST на основе столбца 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, как показано здесь:

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

Дополнительную информацию см. в разделе 26.2.3.1, «Разбиение по столбцам RANGE».

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

Дополнительную информацию о синтаксисе PARTITION BY LIST COLUMNS() см. в разделе 15.1.20, «Запрос CREATE TABLE».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/partitioning-columns-list.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API