Documentation Home
MySQL 8.0 参考手册  / 第 15 章 InnoDB 存储引擎  /  14.13 InnoDB和在线DDL

14.13 InnoDB和在线DDL

在线 DDL 功能支持就地表更改和并发 DML。此功能的好处包括:

  • 在繁忙的生产环境中提高了响应能力和可用性,在这种情况下,让表格在几分钟或几小时内不可用是不切实际的。

  • 能够使用 LOCK子句在 DDL 操作期间调整性能和并发性之间的平衡。请参阅 LOCK 子句

  • 比表复制方法更少的磁盘空间使用和 I/O 开销。

在线 DDL 功能建立在 MySQL 5.5 中可用的快速索引创建功能之上,该功能优化CREATE INDEXDROP INDEX避免了表复制行为。

NDB ClusterNDB存储引擎还支持在线表模式更改,但使用其自己的语法与用于InnoDB 在线 DDL 操作的语法不兼容。有关更多信息,请参阅 第 18.6.12 节,“在 NDB Cluster 中使用 ALTER TABLE 进行在线操作”

通常,您无需执行任何特殊操作即可启用在线 DDL。默认情况下,MySQL 在允许的情况下以尽可能少的锁定方式执行操作。

ALGORITHM您可以使用语句的andLOCK子句 控制 DDL 操作的各个方面 ALTER TABLE。这些子句放在语句的末尾,用逗号与表和列规范分开。例如:

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

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

  • 为避免意外地使表不可用于读取、写入或两者,请在 ALTER TABLE语句中指定一个子句,例如 LOCK=NONE(允许读取和写入)或 LOCK=SHARED(允许读取)。如果请求的并发级别不可用,操作将立即停止。

  • 要比较性能,请使用 ALGORITHM=INPLACE和 运行语句ALGORITHM=COPYold_alter_table或者,在禁用和启用配置选项 的情况下运行语句 。

  • ALTER TABLE为避免复制表 的操作占用服务器,请包含ALGORITHM=INPLACE. 如果语句不能使用就地机制,它会立即停止。