原文链接

在线 DDL 特性提供了对原地改表和并发 DML 的支持。好处包括:

  • 在繁忙的生产环境中提高响应能力和可用性
  • 在 DDL 操作期间使用 LOCK 子句调整性能和并发性之间的平衡能力,参阅 《The LOCK clause》
  • 相比于复制表,更少的磁盘空间使用及 I/O 开销

在线 DDL 特性建立在 MySQL 5.5 提供的快速索引创建特性的基础上,该特性优化了 CREATE INDEXDROP INDEX,以避免表复制行为。

NDB 集群存储引擎也支持在线表模式修改,但是它使用自己的语法,与 InnoDB 的在线 DDL 操作语法不兼容。

通常,你不需要作任何特殊的事情来启用在线 DDL。默认情况下,MySQL 在适当的地方执行操作(如果允许的话),并且尽可能少地使用锁。

你可以使用 ALTER TABLE 语句的 ALGORITHMLOCK 子句控制 DDL 操作的各个方面。这些子句位于语句的末尾,用逗号将他们和表、列的规范分隔开,例如:

1
ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;

LOCK 子句用于微调对标的并发访问程度。ALGORITHM 主要用于性能比较,并在遇到任何问题时作为对旧的表复制行为的备份,例如:

  • 为了避免意外地使表对读、写或两者都不可用,可以在 ALTER TABLE 语句上指定一个子句,如 LOCK=NONE(允许读写)或 LOCK=SHARED(允许读)。如果请求的并发级别不可用,操作将立即停止
  • 要比较性能,请分别运行包含 ALGORITHM=INPLACEALGORITHM=COPY 的语句。或者,运行一个禁用或启用 old_alter_table 配置项的语句
  • 为了避免操作 ALTER TABLE 时因复制表而占用服务器,可以使用 ALGORITHM=INPLACE。如果不能使用就地机制,语句将立即停止

在线 DDL 操作


TODO

Index Operations

Syntax and Usage Notes

Primary Key Operations

Syntax and Usage Notes

Column Operations