Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот раздел обсуждает типы разделения, которые доступны в MySQL 5.7. Они включают типы, перечисленные здесь:
RANGE
разделение. Этот тип разделения
присваивает строки разделам, основанным на значениях столбцов, находящихся в пределах данного диапазона.
См. Раздел
17.2.1,"RANGE
Разделение". Для получения информации о
расширении этого типа, RANGE COLUMNS
, см. Раздел
17.2.3.1,"RANGE COLUMNS
разделение".
LIST
разделение. Подобный разделению RANGE
, за исключением того, что раздел выбирается основанный на столбцах,
соответствующих один из ряда дискретных значений. См. Раздел
17.2.2,"LIST
Разделение". Для получения информации о
расширении этого типа, LIST COLUMNS
, см. Раздел
17.2.3.2,"LIST COLUMNS
разделение".
HASH
разделение. С этим типом разделения раздел
выбирается основанный на значении, возвращенном определяемым пользователем выражением, которое работает
на значениях столбцов в строках, которые будут вставлены в таблицу. Функция может состоять из любого
выражения, допустимого в MySQL, который приводит к неотрицательному целочисленному значению. Расширение
этого типа, LINEAR HASH
, также доступно. См. Раздел
17.2.4,"HASH
Разделение".
KEY
разделение. Этот тип разделения подобен
разделению HASH
, за исключением того, что только один или более столбцов,
которые будут оценены, предоставляются, и сервер MySQL обеспечивает свою собственную хеш-функцию. Эти
столбцы могут содержать кроме целочисленных значений, так как хеш-функция, предоставленная MySQL,
гарантирует целочисленный результат независимо от типа данных столбца. Расширение этого типа, LINEAR KEY
, также доступно. См. Раздел
17.2.5,"KEY
Разделение".
Очень обычное использование разделения базы данных должно выделять данные по времени. Некоторые системы баз
данных поддерживают явное разделение даты, которое 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
Синтаксис".