为什么在mariadb 10.6.11中,当向默认值为NULL的表的末尾添加字段时,会发生复制到tmp表?

eni9jsuy  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(84)

有两个大表(> 10 GB)。当添加一个字段到其中一个表的末尾时,复制到tmp表发生,当添加一个字段到另一个表时,它会立即改变表-你可以在phpmyadmin中的state选项卡,state列中看到它。为什么会发生这种情况?据我所知,在mysql和mariadb的后续版本中,这样的查询应该不需要将数据复制到临时表中。这两张table都是无辜的。示例查询

ALTER TABLE `mytable` ADD `last_field` VARCHAR(511) NULL DEFAULT NULL AFTER `last_field_now`
vkc1a9a2

vkc1a9a21#

MariaDB为ALTER TABLE-命令提供了多种算法。
检查INSTANT alter算法的limitations,看看这些是否适用于您的表。

  • 如果表包含由于FULLTEXT INDEX而隐藏的FTS_DOC_ID列,则即时ALTER TABLE.添加列将是不可能的。
  • InnoDB数据文件后即时ALTER TABLE. ADD COLUMN不能导入到旧版本的MariaDB或MySQL中,除非先重建。
  • 使用Instant ALTER TABLE后... ADD COLUMN,任何表重建操作(如ALTER TABLE... FORCE)都将立即将添加的列合并到主表体中。
  • Instant ALTER TABLE. ADD COLUMN对于ROW_FORMAT=COMPRESSED不可用。

相关问题