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

17.3.2. Управление HASH и KEYРазделы

Таблицы, которые делятся хешем или ключом, очень подобны друг другу относительно произведения изменений в установке разделения, и оба отличаются многими способами от таблиц, которые были разделены диапазоном или списком. По этой причине этот раздел адресует модификацию таблиц, разделенных хешем или ключом только. Для обсуждения добавления и отбрасывания разделов таблиц, которые делятся диапазоном или списком, см. Раздел 17.3.1, "Управление RANGE и LIST Разделы".

Невозможно отбросить разделы от таблиц, которые делятся HASH или KEY таким же образом то, что Вы можете от таблиц, которые делятся RANGE или LIST. Однако, можно объединиться HASH или KEY разделы используя ALTER TABLE ... COALESCE PARTITION оператор. Предположите, что у Вас есть таблица, содержащая данные о клиентах, которые делятся на двенадцать разделов. clients таблица определяется как показано здесь:

CREATE TABLE clients (    id INT,    fname VARCHAR(30),    lname VARCHAR(30),    signed DATE)PARTITION BY HASH( MONTH(signed) )PARTITIONS 12;

Чтобы сократить количество разделов от двенадцать до восемь, выполните следующий ALTER TABLE команда:

mysql> ALTER TABLE clients COALESCE PARTITION
        4;Query OK, 0 rows affected (0.02 sec)

COALESCE работы одинаково хорошо с таблицами, которые делятся HASH, KEY, LINEAR HASH, или LINEAR KEY. Вот пример, подобный предыдущему, отличаясь только, в котором таблица делится LINEAR KEY:

mysql> CREATE TABLE clients_lk (    ->     id INT,    ->     fname
        VARCHAR(30),    ->     lname VARCHAR(30),    ->     signed DATE    -> )    -> PARTITION BY LINEAR
        KEY(signed)    -> PARTITIONS 12;Query OK, 0 rows affected (0.03 sec)mysql> ALTER TABLE clients_lk COALESCE PARTITION 4;Query OK, 0 rows affected (0.06 sec)Records: 0  Duplicates: 0  Warnings: 0

Отметьте что число после COALESCE PARTITION число разделов, чтобы объединиться в остаток — другими словами, это - число разделов, чтобы удалить из таблицы.

Если Вы пытаетесь удалить больше разделов, чем таблица имеет, результатом является ошибка как один показанный:

mysql> ALTER TABLE clients COALESCE PARTITION
        18;ERROR 1478 (HY000): Cannot remove all partitions, use DROP TABLE instead

Увеличивать число разделов для clients таблица от 12 до 18. использовать ALTER TABLE ... ADD PARTITION как показано здесь:

ALTER TABLE clients ADD PARTITION PARTITIONS 6;