标签:mysql ddl alter-table online-operations
由于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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。