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

18.1. Краткий обзор Разделения в MySQL

Этот раздел обеспечивает концептуальный краткий обзор разделения в MySQL 5.6.

Для получения информации о разделении ограничений и ограничений функции, см. Раздел 18.6, "Ограничения и Ограничения на Разделение".

Стандарт SQL не обеспечивает очень в способе руководства относительно физических аспектов хранения данных. Язык самого SQL предназначается, чтобы работать независимо от любых структур данных или носителей, базовых схемы, таблицы, строки, или столбцы, с которыми он работает. Тем не менее, наиболее усовершенствованные системы управления базами данных развили некоторые средства определения физического расположения, которое будет использоваться для того, чтобы сохранить определенные части данных с точки зрения файловой системы, аппаратных средств или даже обоих. В MySQL, InnoDB механизм хранения долго поддерживал понятие табличной области, и MySQL Server, даже до введения разделения, мог быть сконфигурирован, чтобы использовать различные физические каталоги для того, чтобы сохранить различные базы данных (см. Раздел 8.11.3.1, "Используя Символьные ссылки", для объяснения того, как это делается).

Разделение берет это понятие шаг далее, позволяя Вам распределить части отдельных таблиц через файловую систему согласно правилам, которые можно установить в значительной степени как необходимый. В действительности различные части таблицы сохранены как отдельные таблицы в различных расположениях. Выбранное пользователем правило, по которому выполняется подразделение данных, известно как функция разделения, которая в MySQL может быть модулем, простым соответствием против ряда диапазонов или оценить списки, внутреннюю хеш-функцию, или линейную хеш-функцию. Функция выбирается согласно типу разделения, определенному пользователем, и берет в качестве его параметра значение предоставленного пользователем выражения. Это выражение может быть значением столбца, функция, действующая на одно или более значений столбцов, или ряд того или большего количества значений столбцов, в зависимости от типа разделения, которое используется.

В случае RANGE, LIST, и [LINEAR] HASH деля, значение столбца разделения передают к функции разделения, которая возвращает целочисленное значение, представляющее число раздела, в котором должна быть сохранена та определенная запись. Эта функция должна быть непостоянной и неслучайной. Это, возможно, не содержит запросов, но может использовать SQL-выражение, которое допустимо в MySQL, пока то выражение возвращается также NULL или целое число intval так, что

-MAXVALUE <= intval <= MAXVALUE

(MAXVALUE используется, чтобы представить наименьшее количество верхней границы для типа рассматриваемого целого числа. -MAXVALUE представляет самую большую нижнюю границу.)

Для [LINEAR] KEY, RANGE COLUMNS, и LIST COLUMNS деля, выражение разделения состоит из списка одного или более столбцов.

Для [LINEAR] KEY деля, функция разделения предоставляется MySQL.

Для получения дополнительной информации о разрешенных типах столбца разделения и разделении функций, см. Раздел 18.2, "Деля Типы", так же как Раздел 13.1.17,"CREATE TABLE Синтаксис", который обеспечивает описания синтаксиса разделения и дополнительные примеры. Для получения информации об ограничениях на разделение функций см. Раздел 18.6.3, "Деля Ограничения, Касающиеся Функций".

Это известно как горизонтальное разделение — то есть, различные строки таблицы могут быть присвоены различным физическим разделам. MySQL 5.6 не поддерживает вертикальное разделение, в котором различные столбцы таблицы присваиваются различным физическим разделам. Нет в это время никаких планов ввести вертикальное разделение в MySQL 5.6.

Для получения информации об определении, поддерживает ли Ваш двоичный файл MySQL Server определяемое пользователем разделение, см. Главу 18, Деля.

Для того, чтобы создать разделенные таблицы, можно использовать большинство механизмов хранения, которые поддерживаются Вашим сервером MySQL; MySQL, делящий выполнения механизма в отдельном уровне и, может взаимодействовать с любым из них. В MySQL 5.6 все разделы той же самой разделенной таблицы должны использовать тот же самый механизм хранения; например, невозможно использовать MyISAM для одного раздела и InnoDB для другого. Однако, нет ничего препятствующего тому Вам использовать различные механизмы хранения для различных разделенных таблиц на том же самом сервере MySQL или даже в той же самой базе данных.

Разделение MySQL не может использоваться с MERGE, CSV, или FEDERATED механизмы хранения.

Разделение KEY или LINEAR KEY возможно с NDB, но другие типы определяемого пользователем разделения не поддерживаются для таблиц, используя этот механизм хранения. Кроме того, NDB у таблицы, которая использует определяемое пользователем разделение, должен быть явный первичный ключ, и любые столбцы, на которые ссылаются в выражении разделения таблицы, должны быть частью первичного ключа. Однако, если никакие столбцы не перечисляются в PARTITION BY KEY или PARTITION BY LINEAR KEY пункт CREATE TABLE или ALTER TABLE оператор, используемый, чтобы создать или изменить разделенный пользователем NDB таблица, тогда таблица не обязана иметь явный первичный ключ. Для получения дополнительной информации см. Раздел 17.1.6.1, "Несоблюдение Синтаксиса SQL в MySQL Cluster".

Чтобы использовать определенный механизм хранения для разделенной таблицы, необходимо только использовать [STORAGE] ENGINE опция, как Вы были бы для неразделенной таблицы. Однако, следует иметь в виду это [STORAGE] ENGINE (и другие табличные опции), должен быть перечислен прежде, чем любые опции разделения используются в a CREATE TABLE оператор. Этот пример показывает, как составить таблицу, которая делится хешем в 6 разделов и которая использует InnoDB механизм хранения:

CREATE TABLE ti (id INT, amount DECIMAL(7,2), tr_date DATE)    ENGINE=INNODB    PARTITION BY HASH( MONTH(tr_date) )    PARTITIONS 6;

Каждый PARTITION пункт может включать a [STORAGE] ENGINE опция, но в MySQL 5.6 это не имеет никакого эффекта.

Важный

Разделение применяется ко всем данным и индексирует таблицы; невозможно разделить только данные и не индексирование, или наоборот, и при этом невозможно разделить только часть таблицы.

Данные и индексируют для каждого раздела, может быть присвоен определенному каталогу, используя DATA DIRECTORY и INDEX DIRECTORY опции для PARTITION пункт CREATE TABLE оператор, используемый, чтобы создать разделенную таблицу.

DATA DIRECTORY и INDEX DIRECTORY опции не имеют никакого эффекта, определяя разделы для таблиц, используя InnoDB механизм хранения.

DATA DIRECTORY и INDEX DIRECTORY не поддерживаются для отдельных разделов или подразделов на Windows. Эти опции игнорируются на Windows, за исключением того, что предупреждение сгенерировано.

Кроме того, MAX_ROWS и MIN_ROWS может использоваться, чтобы определить максимальные и минимальные числа строк, соответственно, который может быть сохранен в каждом разделе. MAX_ROWS опция может быть полезной для заставления таблиц MySQL Cluster создаваться с дополнительными разделами, таким образом учитывая большее хранение хеша индексирует. См. документацию для DataMemory параметр конфигурации узла данных, так же как Раздел 17.1.2, "MySQL Cluster Nodes, Node Groups, Копии, и Разделы", для получения дополнительной информации.

Некоторые преимущества разделения перечисляются здесь:

Другие преимущества, обычно связываемые с разделением, включают тех в следующий список. Эти опции в настоящий момент не реализуются в MySQL Partitioning, но высоки в нашем списке приоритетов.

Убедитесь, что часто проверяли этот раздел и главу для обновлений, поскольку разработка MySQL Partitioning продолжается.