Переорганизация секций с использованием ALTER TABLE
На этом этапе мы научимся переорганизовывать секции (partitions) с помощью оператора ALTER TABLE
в MySQL. Переорганизация секций может быть полезна по различным причинам, например, для объединения секций, разделения секций или добавления новых секций.
Сначала убедитесь, что вы подключены к серверу MySQL и используете базу данных sales_data
. Если вы закрыли соединение на предыдущем этапе, подключитесь снова, используя следующую команду:
mysql -u root -p
Введите пароль для пользователя root, если вас об этом попросят. Затем выберите базу данных sales_data
:
USE sales_data;
Начнем с добавления новой секции для года 2024. В настоящее время все данные о продажах с 2024 года и далее хранятся в секции pFuture
. Мы можем создать отдельную секцию для 2024 года, используя оператор ALTER TABLE
с предложением ADD PARTITION
:
ALTER TABLE sales ADD PARTITION (PARTITION p2024 VALUES LESS THAN (2025));
Этот оператор добавляет новую секцию с именем p2024
, которая будет содержать все строки, где год в столбце sale_date
меньше 2025 (то есть 2024 год). После добавления секции нам нужно переорганизовать секцию pFuture
, чтобы исключить из нее данные за 2024 год.
ALTER TABLE sales REORGANIZE PARTITION pFuture INTO (
PARTITION p2025 VALUES LESS THAN (2026),
PARTITION pFuture VALUES LESS THAN MAXVALUE
);
Эта команда разделяет секцию pFuture
на секцию p2025
и новую секцию pFuture
. Секция p2025
будет содержать данные за 2025 год, а новая секция pFuture
- данные за 2026 год и последующие годы.
Теперь проверим структуру секций:
SELECT
PARTITION_NAME,
TABLE_ROWS
FROM
INFORMATION_SCHEMA.PARTITIONS
WHERE
TABLE_SCHEMA = 'sales_data' AND TABLE_NAME = 'sales';
В результате вы должны увидеть новую секцию p2024
, секцию p2025
и обновленную секцию pFuture
.
+----------------+------------+
| PARTITION_NAME | TABLE_ROWS |
+----------------+------------+
| p2020 | 1 |
| p2021 | 2 |
| p2022 | 2 |
| p2023 | 2 |
| p2024 | 1 |
| p2025 | 0 |
| pFuture | 0 |
+----------------+------------+
Далее посмотрим, как объединить секции. Предположим, что мы хотим объединить секции p2020
и p2021
в одну секцию с именем p2020_2021
. Мы можем сделать это, используя оператор ALTER TABLE
с предложением REORGANIZE PARTITION
:
ALTER TABLE sales REORGANIZE PARTITION p2020, p2021 INTO (
PARTITION p2020_2021 VALUES LESS THAN (2022)
);
Этот оператор объединяет секции p2020
и p2021
в новую секцию с именем p2020_2021
. Предложение VALUES LESS THAN (2022)
указывает, что эта секция будет содержать все строки, где год в столбце sale_date
меньше 2022.
Теперь проверим структуру секций еще раз:
SELECT
PARTITION_NAME,
TABLE_ROWS
FROM
INFORMATION_SCHEMA.PARTITIONS
WHERE
TABLE_SCHEMA = 'sales_data' AND TABLE_NAME = 'sales';
Вы должны увидеть, что секции p2020
и p2021
были заменены на секцию p2020_2021
.
+------------------+------------+
| PARTITION_NAME | TABLE_ROWS |
+------------------+------------+
| p2020_2021 | 3 |
| p2022 | 2 |
| p2023 | 2 |
| p2024 | 1 |
| p2025 | 0 |
| pFuture | 0 |
+------------------+------------+
Наконец, посмотрим, как удалить секцию. Предположим, что мы хотим удалить секцию p2025
. Мы можем сделать это, используя оператор ALTER TABLE
с предложением DROP PARTITION
:
ALTER TABLE sales DROP PARTITION p2025;
Теперь проверим структуру секций в последний раз:
SELECT
PARTITION_NAME,
TABLE_ROWS
FROM
INFORMATION_SCHEMA.PARTITIONS
WHERE
TABLE_SCHEMA = 'sales_data' AND TABLE_NAME = 'sales';
Вы должны увидеть, что секция p2025
была удалена.
+------------------+------------+
| PARTITION_NAME | TABLE_ROWS |
+------------------+------------+
| p2020_2021 | 3 |
| p2022 | 2 |
| p2023 | 2 |
| p2024 | 1 |
| pFuture | 0 |
+------------------+------------+
Используя оператор ALTER TABLE
с различными предложениями, вы можете легко переорганизовать свои секции, чтобы удовлетворить свои меняющиеся потребности в управлении данными.