数据库
首页 > 数据库> > mysql – 为什么我更喜欢ALGORITHM = COPY到ALGORITHM = INPLACE?

mysql – 为什么我更喜欢ALGORITHM = COPY到ALGORITHM = INPLACE?

作者:互联网

由于MySQL 5.6引入了在线DDL,因此ALTER TABLE命令可以选择指定ALGORITHM = INPLACE或ALGORITHM = COPY. overview of online DDL指出,默认情况下,尽可能使用INPLACE,并暗示(没有说明)INPLACE算法比COPY算法便宜.

那么我有什么理由在ALTER TABLE语句中指定ALGORITHM = COPY?

解决方法:

是的,有些情况下您可以指定COPY,但这可能是出于其他原因而不是性能.

重要的是要了解MySQL引入了新功能 – 5.6版中的在线DLL处理.它没有删除脱机处理.因此需要区分这两种模式:

>某些操作仍然只能在脱机模式下工作.有关可以或不可以就地执行的DDL操作的列表,请参见表15.10“Summary of Online Status for DDL Operations”.
>在线和离线模式下的操作行为略有不同,因此出于兼容性原因,您可以选择“旧”模式.

一些例子(请建议更多):

>在MySQL 5.6之前创建的InnoDB表不支持ALTER TABLE … ALGORITHM = INPLACE用于包含时间列(DATE,DATETIME或TIMESTAMP)的表,并且尚未使用ALTER TABLE … ALGORITHM = COPY重建.在这种情况下,ALTER TABLE … ALGORITHM = INPLACE操作返回错误.
COPY模式下的ADD PRIMARY KEY子句以静默方式将NULL转换为该数据类型的默认值(对于INT为0,对于varchar为空字符串),而IN_PLACE不会这样做.

With the ALGORITHM=COPY clause, the operation succeeds despite the
presence of NULL values in the primary key columns; the data is
silently changed, which could cause problems.

更喜欢COPY的另一个原因:

Operations for which you specify ALGORITHM=COPY or old_alter_table=1,
to force the table-copying behavior if needed for precise
backward-compatibility in specialized scenarios.

虽然MySQL手册没有谈到实际场景,但你可以想象一些.例如.开发人员在ALTER INDEX操作期间依赖于表被锁定,因此表是只读的或完全锁定的,并且有一个进程在索引重建期间读取静态表.

标签:mysql,ddl,alter-table,online-operations
来源: https://codeday.me/bug/20190805/1589241.html