У меня есть игровая БД, которая была первоначально создана в MySQL 3.x и все еще есть некоторые таблицы MyISAM.Как конвертировать огромную таблицу из MyISAM в INNODB?
Из-за разных причин (что является предметом отдельного обсуждения) я хочу перенести их в INNODB.
Одна из таблиц имеет 120 миллионов строк (например, 120 262 514). Я выполнил его преобразование в INNODB ... он был запущен вчера и продолжается ...
В дополнение к изменению движка я хотел изменить тип для нескольких полей. Запрос следующим образом:
ALTER TABLE gb_vfm5.my_table
CHANGE COLUMN matchId matchId INT(11) NOT NULL DEFAULT 0,
CHANGE COLUMN team team INT(11) NOT NULL DEFAULT 0,
CHANGE COLUMN pl1 pl1 INT(11) NOT NULL DEFAULT 0,
CHANGE COLUMN actionId actionId TINYINT(2) UNSIGNED NOT NULL DEFAULT 0,
CHANGE COLUMN src src TINYINT(2) UNSIGNED NOT NULL DEFAULT 0,
CHANGE COLUMN opponent opponent INT(11) NOT NULL DEFAULT 0, ENGINE = INNODB
Вопросы:
Почему выполнение запроса занимает так много времени? Вероятно, я должен 1-го изменить двигатель и после этого изменить поля?
Каков наилучший/правильный способ сделать такие изменения?
Насколько велика загрузка этого типа преобразования на сервер MySQL?
P.S. Сейчас я думаю о копировании БД в
P.P.S. Определение таблицы для конвертации:
CREATE TABLE my_moment(
Id INT(11) NOT NULL AUTO_INCREMENT,
matchId INT(10) UNSIGNED NOT NULL DEFAULT 0,
mTime TINYINT(3) UNSIGNED NOT NULL DEFAULT 0,
team INT(10) UNSIGNED NOT NULL DEFAULT 0,
pl1 INT(10) UNSIGNED NOT NULL DEFAULT 0,
actionId TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
src TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
pos2 SMALLINT(5) UNSIGNED NOT NULL DEFAULT 0,
pl2 INT(11) NOT NULL DEFAULT 0,
poss1 SMALLINT(5) UNSIGNED NOT NULL DEFAULT 0,
poss2 SMALLINT(5) UNSIGNED NOT NULL DEFAULT 0,
mRes TINYINT(4) NOT NULL DEFAULT 0,
opponent INT(10) NOT NULL DEFAULT 0,
move TINYINT(3) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (Id),
INDEX actionId (actionId, pl1, mRes),
INDEX matchId (matchId),
INDEX NewIndex1 (mRes),
INDEX NewIndex3 (actionId, pl2),
INDEX pl1 (pl1),
INDEX pos2 (pos2),
INDEX UK_my_table_MatchTeamAction (matchId, team, actionId)
)
ENGINE = MYISAM
AUTO_INCREMENT = 125433749
AVG_ROW_LENGTH = 36
CHARACTER SET cp1251
COLLATE cp1251_general_ci
COMMENT = 'My table description';
Вы не указали нам определения таблиц базовой таблицы. – fenway
Добавлено. спасибо, что привлекли это мое внимание. – Budda
При изменении таблиц MySQL создаст вторую таблицу с новыми атрибутами (или новым типом двигателя), скопирует все строки первой таблицы во вторую таблицу и затем заменит первую таблицу на вторую. Для большой таблицы эта операция займет много времени. – jmkeyes