将 varchar 列大小从 255 个字符扩展到 1024 个字符似乎没有在具有 InnoDB 存储的 Mysql 8.x DB 中使用复制算法

问题描述 投票:0回答:1

我遇到过https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.htmlMySql文档说将varchar列的长度从255扩展到1024只是可以通过算法复制来实现。 我在这里附上文档的片段

但是,当我尝试在表上运行 alter sql 来实现此目的时,我收到了奇怪的结果。我有一个表 table1,其列 col1 为 varchar(255),我在其上运行了 alter sql。

执行以下sql花费了0.07

Alter table table1 modify column col1 varchar(1024)

然而,执行以下sql需要26.54

Alter table table1 modify column col1 varchar(1024), algorithm=copy

根据文档,此更改操作只能使用复制算法执行,但查询结果显示并非如此。查询在具有 InnoDB 存储引擎的 MySql Db 版本 8.0.32 上运行。有人可以帮助我理解为什么我会观察上述行为吗?

在不指定任何算法的情况下执行 alter Sql 花费了 0.07 秒,但使用复制算法则花费了 26.54 秒。我预计两者都需要 26.54 秒。

mysql performance query-optimization innodb
1个回答
0
投票

VARCHAR(255)
最多允许 255 个字符。例如,如果列声明为
CHARACTER SET utf8mmb4
,则 bytes 的数量最多为 4*255,因此需要 2 个字节的长度开始。

文档可能需要更新;它是十多年前写的。它可能按原样应用于旧默认值

CHARACTER SET latin1
。 (
latin1
每个字符只需要 1 个字节。)

© www.soinside.com 2019 - 2024. All rights reserved.