MySQL 3.x で最初に作成されたゲーム DB があり、まだいくつかの MyISAM テーブルがあります。
さまざまな理由により (これは別の議論の主題です)、それらを INNODB に移行したいと考えています。
テーブルの 1 つには 1 億 2000 万行 (正確には 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
質問:
クエリの実行に時間がかかるのはなぜですか? おそらく、最初にエンジンを変更し、その後フィールドを変更する必要がありますか?
そのような変更を行うための最良/適切な方法は何ですか?
このタイプの変換の MySQL サーバーへの負荷はどれくらいですか?
PS現在、DBをコピーすることを考えています
PPS 変換するテーブルの定義:
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';