【发布时间】:2014-02-26 22:51:47
【问题描述】:
在我的网站上,我有一个包含 1000 万行的访问者表。
对站点的每个请求都会向表中插入行,以防表被锁定(通常在优化查询中)访问者无法进入站点
表引擎是 MyISAM,我想把它改成 InnoDB
我有几个问题:
- 如何在不停止网站工作的情况下更改表引擎
- 有一种方法可以优化 InnoDB 表而不锁定它
【问题讨论】:
在我的网站上,我有一个包含 1000 万行的访问者表。
对站点的每个请求都会向表中插入行,以防表被锁定(通常在优化查询中)访问者无法进入站点
表引擎是 MyISAM,我想把它改成 InnoDB
我有几个问题:
【问题讨论】:
最简单的方法是
ALTER TABLE table_name ENGINE = InnoDB;
如果您使用 InnoDB 引擎,则不必担心锁定表,因为该引擎按行锁定数据。
【讨论】:
ALTER运行LOCK TABLE table_name WRITE;和运行后UNLOCK TABLES;。
oleksii.svarychevskyi 是对的,InnoDB 使用行级锁,但如果你这样做
ALTER TABLE table_name ENGINE = InnoDB;要将 table_name 从 MyIsam 更改为 InnoDB,将存在元数据锁定(在表级别),因为原始表引擎是 MyIsam。
【讨论】: