【问题标题】:In mySQL 5.6, whats the default behavior of the ALGORITHM parameter?在 mySQL 5.6 中,ALGORITHM 参数的默认行为是什么?
【发布时间】:2014-09-15 22:49:46
【问题描述】:

我正在使用 MySQL 5.6(及其 Online-DDL 功能)生成一些就地更改表操作,例如“ADD COLUMN”。我看到 LOCK 参数默认为允许的最高并发级别(对于 ADD COLUMN,这应该是“NONE”)但是 ALGORITHM 参数的默认行为是什么?在文档中它说“ALGORITHM = DEFAULT 与完全不指定 ALGORITHM 子句相同。”但这没有用,因为它没有说明 ALGORITHM = DEFAULT 等于什么。

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

有人知道吗?

【问题讨论】:

    标签: mysql


    【解决方案1】:

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

    某些更改可以使用 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。

    【讨论】:

    • 好的,所以它类似于 MySQL 尝试允许尽可能多的并发的默认“lock”参数。谢谢!我想你几周前在我询问 percona 时也帮助了我。绝对感激。
    • 很高兴为您提供帮助!如果这是您正在寻找的,请记住通过投票或标记为已接受的答案来回报。
    • 所以我只是尝试了一个“ALTER TABLE ADD COLUMN...”语句,在一个有 500 万行的表上花了 3 分钟。在此操作期间,该表似乎已锁定。但是,当我重新运行该语句并附加“,ALGORITHM=inplace,LOCK=none”时,它花了 6 分钟,但该表仍然可以使用。我认为这些是默认值,为什么我必须明确指定它们?
    猜你喜欢
    • 2010-11-04
    • 1970-01-01
    • 2011-05-24
    • 2015-03-18
    • 2013-06-16
    • 1970-01-01
    • 2013-05-31
    • 2014-03-21
    • 1970-01-01
    相关资源
    最近更新 更多