【问题标题】:Swaping MySQL table engines on the fly即时交换 MySQL 表引擎
【发布时间】:2012-09-07 23:55:05
【问题描述】:

我有一个比较大的表(几百万条记录),多个网站都在查询这个表,从一开始表的引擎是 MyISAM,目前我遇到了表锁的问题。

所以。我决定将表引擎从 MyISAM 更改为 InnoDB。

问题:里面有隐藏的石头吗?数据库是实时的。所以我需要确保它不会影响任何网站的功能。

此表中目前没有设置全文索引。

【问题讨论】:

标签: mysql myisam


【解决方案1】:

基本上,您必须这样做:

ALTER TABLE t1 ENGINE=InnoDB;

或者这个:

INSERT INTO my_innodb_table SELECT * FROM my_myisam_table

检查此:Converting Tables from Other Storage Engines to InnoDB 以了解有关此事的考虑,特别是:

InnoDB 没有针对单独索引的特殊优化 以 MyISAM 存储引擎的方式创建。因此,它确实 无需支付导出和导入表以及之后创建索引的费用。 将表更改为 InnoDB 的最快方法是进行插入 直接到 InnoDB 表。也就是说,使用 ALTER TABLE ... ENGINE=INNODB,或者创建一个空的 InnoDB 表 定义并使用 INSERT INTO ... SELECT * FROM 插入行 ....

还有这些: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.html

【讨论】:

    猜你喜欢
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    相关资源
    最近更新 更多