首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将表类型更改为InnoDB

将表类型更改为InnoDB
EN

Stack Overflow用户
提问于 2012-04-06 12:40:27
回答 2查看 9.8K关注 0票数 6

我有一个myisam专用的32 GB内存的mysql服务器,它在默认配置下运行。我想要将一个表的引擎类型更改为InnoDB,以避免表锁。它有5000万条记录,磁盘大小约为15 GB。我正在使用mysql版本5.5,我想我需要添加以下选项并重新启动mysql。

代码语言:javascript
复制
innodb_buffer_pool_size=1G
innodb_log_file_size=100M
innodb_file_per_table=1

在更改发动机类型时,还需要考虑哪些内容?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-06 12:50:16

实际上,您将运行一个命令来转换每个表。

首先对表进行排序会更快:

代码语言:javascript
复制
ALTER TABLE tablename ORDER BY primary_key_column;

然后,运行alter命令:

代码语言:javascript
复制
ALTER TABLE tablename ENGINE = INNODB;

如果表真的很大,可能需要一段时间,而且会占用大量的CPU……

票数 17
EN

Stack Overflow用户

发布于 2012-04-06 14:23:13

首先,检查您的数据库是否支持InnoDB引擎(我打赌它是受支持的;):

代码语言:javascript
复制
SHOW ENGINES\G

如果是,则已经有默认innodb related parameters,请使用以下命令进行检查:

代码语言:javascript
复制
SHOW VARIABLES LIKE '%innodb%'

并尝试理解它们,并根据您的特定需求进行更改。即使您使用默认参数,您现在也可以使用InnoDB表。

如果只想创建InnoDB表,可以使用:SET storage_engine=INNODB;为当前会话更改默认存储引擎,也可以使用default-storage-engine选项在配置中更改默认存储引擎。

顺便说一下,将表转换为InnoDB的最快方法不是上述方法。通过简单地插入数据,可以执行以下操作将表转换为InnoDB:

代码语言:javascript
复制
CREATE TABE new AS SELECT * FROM old WHERE 1<>1;
ALTER TABLE new ENGINE = INNODB;
INSERT INTO new SELECT * FROM old;

当然,您必须手动添加所需的索引,但与在稍大的表上使用ALTER TABLE ...相比,这通常值得您节省时间(和痛苦)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10039187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档