在我的网站上,我有一个包含1000万行记录的访客表。
每次请求网站时,都会向该表插入新的一行,但如果表被锁定(通常是优化查询),则访问者将无法进入网站。
该表的引擎为MyISAM,我想将其更改为InnoDB。
我有几个问题:
- 如何在不停止网站运行的情况下更改表引擎
- 是否有一种方法可以在不锁定表的情况下对InnoDB表进行优化。
最简单的方法是
ALTER TABLE table_name ENGINE = InnoDB;
如果您使用InnoDB引擎,则不必担心锁定表格,因为该引擎会按行锁定数据。
oleksii.svarychevskyi是正确的,InnoDB使用行级锁定,但如果您执行以下操作
ALTER TABLE table_name ENGINE = InnoDB;将table_name从MyIsam更改为InnoDB,会出现元数据锁定(在表级别),因为原始表引擎是MyIsam。
ALTER
之前运行LOCK TABLE table_name WRITE;
,并在运行结束后运行UNLOCK TABLES;
。 - oleksii.svarychevskyi