5

我正在运行 MySQL 5.6.13,我想CREATE INDEX ... BTREE在我的生产数据库上运行一条语句。

该表是 InnoDB 并且有大约 400 万行,我非常希望不要锁定它。

根据文档,似乎该语句不会完全锁定我的表并快速返回。但是,在我做出这个改变之前,我想要第二个意见。

创建这个索引是否安全?

4

1 回答 1

10

默认情况下,MySQL 5.6 中的 InnoDB 将在创建索引时执行读锁,因此您仍然可以让其他并发客户端从表中 SELECT,但不能在创建索引时对该表执行插入/更新/删除。

您可以选择允许索引创建完全在线,甚至不执行读锁定:

ALTER TABLE my_table ADD INDEX a (a), LOCK=NONE;

有关 MySQL 中在线 DDL 语句的更多详细信息,请参阅http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html

另请参阅 MySQL 社区经理今天发布的此博客:自 MySQL 5.5 以来可用性的 10 大进步

PS:索引类型不需要指定BTREE。InnoDB 仅支持 BTREE 索引,因此它忽略了该选项。

于 2013-10-22T17:33:18.643 回答