在mySQL 5.6中,什么是ALGORITHM参数的默认行为?

aso*_*erg 4 mysql

我正在使用MySQL 5.6(以及它的Online-DDL功能)来生成一些就地的alter table操作,比如"ADD COLUMN".我看到LOCK参数默认为允许的最高并发级别(对于ADD COLUMN,这应该是"NONE")但是ALGORITHM参数的默认行为是什么?在文档中,它说"ALGORITHM = DEFAULT是相同的,根本没有指定ALGORITHM子句." 但这没有用,因为它没有说ALGORITHM = DEFAULT等于什么.

http://dev.mysql.com/doc/refman/5.6/en/alter-table.html

谁知道?

Bil*_*win 6

默认值取决于您尝试应用的更改类型.

某些更改可以使用ALGORITHM = INPLACE,因此这是它们的默认值.其他更改永远不能使用在线DDL,因此它们的默认值为ALGORITHM = COPY.例如,无法在适当的位置更改数据类型或删除主键.

请参阅https://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html.它们记录了如何处理不同的操作,默认情况下"Inplace"列中的"No"使用ALGORITHM = COPY,如果尝试使用ALGORITHM = INPLACE则失败.

您可以强制操作使用ALGORITHM = COPY,即使它可以在其中完成其工作,但如果无法执行,则无法请求操作使用ALGORITHM = INPLACE.

  • 好的,所以它类似于"lock"参数的默认值,其中MySQL试图允许尽可能多的并发.谢谢!几周前,当我询问percona时,我想你帮了我一下.绝对欣赏它. (2认同)