Переместить раздел таблицы MySQL в таблицу
Моих навыков поиска в Google было недостаточно, чтобы найти решение этой проблемы. Если возможно, как я могу преобразовать раздел таблицы в отдельную таблицу?
Давайте предположим , что у меня есть part0
, part1
и part2
. ALTER TABLE
Могу ли я дать что- нибудь , что преобразовывает part0
в новую таблицу?
Я думал, что, поскольку данные уже существуют в отдельном файле на диске, процесс создания таблицы может быть быстрее, чем создание новой таблицы с помощью SELECT
запроса.
Ответы
Вам не нужно SELECT
. Это можно сделать с помощью чистого DDL.
В этом примере предположим, что секционированная таблица выглядит следующим образом:
- База данных
mydb
- Таблица
mytable
- Перегородки (
part0
,part1
,part2
)
Это может быть сложно, но вот
USE mydb
CREATE TABLE mynewtable LIKE mytable;
ALTER TABLE mynewtable REMOVE PARTITIONING;
ALTER TABLE mytable
EXCHANGE PARTITION p0
WITH TABLE mynewtable
WITHOUT VALIDATION
;
ALTER TABLE mytable DROP PARTITION p0;
Сначала это делается mynewtable
без каких-либо разделов и той же схемы во всех других аспектах. Затем он меняет местами mynewtable
таблицу с part0
.
Если вы не уверены в этом, запустите
USE mydb
CREATE TABLE mynewtable LIKE mytable;
ALTER TABLE mynewtable REMOVE PARTITIONING;
ALTER TABLE mytable
EXCHANGE PARTITION p0
WITH TABLE mynewtable
WITHOUT VALIDATION
;
Изучите ряды в mynewtable
новой part0
и новой и убедитесь, что
mynewtable
имеет данные из оригиналаpart0
- Новый
part0
должен быть пустым
Убедившись, что транспозиция сработала, запустите
ALTER TABLE mytable DROP PARTITION p0;
Пожалуйста, проверьте это в лаборатории или sqlfiddle. ПОПРОБУЙТЕ !!!
Да, это PARTITION
а TABLE
. Однако для превращения раздела в таблицу или наоборот требуются специальные команды.
См. «Переносимые табличные пространства» и FLUSH TABLES ptable FOR EXPORT; ALTER TABLE ptable DISCARD TABLESPACE; ALTER TABLE ptable IMPORT TABLESPACE. Детали различаются между MySQL 5.6 и 5.7+.
http://mysql.rjweb.org/doc.php/partitionmaint#use_cases_for_partitioning содержит ссылки на несколько мест, где обсуждаются методы.