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

17.2. Разделение Типов

17.2.1. RANGE Разделение
17.2.2. LIST Разделение
17.2.3. COLUMNS Разделение
17.2.4. HASH Разделение
17.2.5. KEY Разделение
17.2.6. Подразделение
17.2.7. Как MySQL Partitioning Handles NULL

Этот раздел обсуждает типы разделения, которые доступны в MySQL 5.7. Они включают типы, перечисленные здесь:

Очень обычное использование разделения базы данных должно выделять данные по времени. Некоторые системы баз данных поддерживают явное разделение даты, которое MySQL не реализует в 5.7. Однако, не трудно в MySQL создать схемы выделения разделов, основанные на DATE, TIME, или DATETIME столбцы, или основанный на выражениях, использующих такие столбцы.

Деля KEY или LINEAR KEY, можно использовать a DATE, TIME, или DATETIME столбец как столбец разделения, не выполняя модификации значения столбца. Например, этот табличный оператор создания совершенно допустим в MySQL:

CREATE TABLE members (    firstname VARCHAR(25) NOT NULL,    lastname VARCHAR(25) NOT NULL,    username VARCHAR(16) NOT NULL,    email VARCHAR(35),    joined DATE NOT NULL)PARTITION BY KEY(joined)PARTITIONS 6;

В MySQL 5.7 также возможно использовать a DATE или DATETIME столбец как использование столбца разделения RANGE COLUMNS и LIST COLUMNS разделение.

Другие типы разделения MySQL, однако, требуют выражения разделения, которое приводит к целочисленному значению или NULL. Если Вы хотите использовать основанное на дате разделение RANGE, LIST, HASH, или LINEAR HASH, можно просто использовать функцию, которая работает на a DATE, TIME, или DATETIME столбец и возвраты такое значение, как показано здесь:

CREATE TABLE members (    firstname VARCHAR(25) NOT NULL,    lastname VARCHAR(25) NOT NULL,    username VARCHAR(16) NOT NULL,    email VARCHAR(35),    joined DATE NOT NULL)PARTITION BY RANGE( YEAR(joined) ) (    PARTITION p0 VALUES LESS THAN (1960),    PARTITION p1 VALUES LESS THAN (1970),    PARTITION p2 VALUES LESS THAN (1980),    PARTITION p3 VALUES LESS THAN (1990),    PARTITION p4 VALUES LESS THAN MAXVALUE);

Дополнительные примеры разделения дат использования могут быть найдены в следующих разделах этой главы:

Для более сложных примеров основанного на дате разделения см. следующие разделы:

Разделение MySQL оптимизируется для использования с TO_DAYS(), YEAR(), и TO_SECONDS() функции. Однако, можно использовать другую дату и функции времени, которые возвращают целое число или NULL, такой как WEEKDAY(), DAYOFYEAR(), или MONTH(). См. Раздел 12.7, "Дата и Функции Времени", для получения дополнительной информации о таких функциях.

Важно помнить — независимо от типа разделения этого Вы используете — что разделы всегда нумеруются автоматически и в последовательности когда создающийся, запускаясь с 0. Когда новая строка вставляется в разделенную таблицу, именно эти числа раздела используются в идентификации корректного раздела. Например, если Ваша таблица использует 4 раздела, эти разделы нумеруются 0, 1, 2, и 3. Для RANGE и LIST деля типы, необходимо гарантировать, что есть раздел, определенный для каждого числа раздела. Для HASH деля, используемая функция пользователя должна возвратить целочисленное значение, больше чем 0. Для KEY деля, эта проблема заботится об автоматически хеш-функцией, которую сервер MySQL использует внутренне.

Имена разделов обычно следуют за правилами, управляющими другими идентификаторами MySQL, такими как те для таблиц и баз данных. Однако, следует отметить, что имена раздела не являются чувствительными к регистру. Например, следующий CREATE TABLE оператор перестал работать как показано:

mysql> CREATE TABLE t2 (val INT)    -> PARTITION BY LIST(val)(    ->     PARTITION mypart VALUES IN (1,3,5),    ->     PARTITION MyPart VALUES IN (2,4,6)    -> );ERROR 1488 (HY000): Duplicate partition name mypart

Отказ происходит, потому что MySQL не видит различия между именами раздела mypart и MyPart.

Когда Вы определяете число разделов для таблицы, это должно быть выражено как положительный, ненулевой целочисленный литерал без начальных нулей, и, возможно, не выражение такой как 0.8E+01 или 6-2, даже если это оценивает к целочисленному значению. Десятичные дроби не разрешаются.

В разделах, которые следуют, мы не обязательно обеспечиваем все возможные формы для синтаксиса, который может использоваться для того, чтобы создать каждый тип раздела; эта информация может быть найдена в Разделе 13.1.14,"CREATE TABLE Синтаксис".