26.3.2 Управление разделами HASH и KEY
Таблицы, разделенные по хешу или ключу, очень похожи друг на друга в отношении внесения изменений в схему разделения, и оба они отличаются от таблиц, разделенных по диапазону или списку. По этой причине этот раздел посвящен только модификации таблиц, разделенных по хешу или ключу. Для обсуждения добавления и удаления разделов таблиц, разделенных по диапазону или списку, см. Раздел 26.3.1, «Управление разделами RANGE и LIST».
Нельзя удалить разделы из таблиц, разделенных по HASH или KEY, так же, как это можно сделать с таблицами, разделенными по RANGE или LIST. Однако вы можете объединить разделы HASH или KEY, используя ALTER TABLE ... COALESCE
PARTITION. Предположим, что таблица clients, содержащая данные о клиентах, разделена на 12 разделов, созданных, как показано здесь:
CREATE TABLE clients (
id INT,
fname VARCHAR(30),
lname VARCHAR(30),
signed DATE
)
PARTITION BY HASH( MONTH(signed) )
PARTITIONS 12;
Для уменьшения количества разделов с 12 до 8 выполните следующую команду 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.