创建索引MySQL 5.6.13在生产数据库上

Kir*_*kus 4 mysql indexing locking

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

该表是InnoDB,有大约400万行,我非常不想锁定它.

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

创建此索引是否安全?

Bil*_*win 8

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

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

ALTER TABLE my_table ADD INDEX a (a), LOCK=NONE;
Run Code Online (Sandbox Code Playgroud)

http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html约在MySQL在线DDL语句的更多细节.

另请参阅今天发布的MySQL社区管理器博客:自MySQL 5.5以来,可用性排名前10位

PS:没有必要为索引类型指定BTREE.InnoDB仅支持BTREE索引,因此忽略该选项.