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

时间:2013-10-22 17:24:53

标签: mysql indexing locking

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

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

根据docs,似乎此声明不会完全锁定我的表格并快速返回。但是,在我做出这个改变之前,我想要第二个意见。

创建此索引是否安全?

1 个答案:

答案 0 :(得分:7)

默认情况下,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社区管理员博客:Top 10 advances to availability since MySQL 5.5

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