Spec-Zone.ru › MySQL 5.7

22.3.2 Управление разделами HASH и KEY

Таблицы, разделяемые по хешу или по ключу, очень похожи друг на друга в отношении внесения изменений в настройку разделения и отличаются от таблиц, разделенных по диапазону или списку. По этой причине этот раздел посвящен только изменению таблиц, разделенных по хешу или по ключу. Для обсуждения добавления и удаления разделов таблиц, разделенных по диапазону или списку, см. Раздел 22.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;

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/partitioning-management-hash-key.html

Spec-Zone.ru

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