在一个查询中添加或删除多个列比对每个列执行一个查询更快吗?例如,是这样的:
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
还有比这更快的吗?
ALTER TABLE t2 DROP COLUMN c;
ALTER TABLE t2 DROP COLUMN d;
最佳答案
是的,运行单个 ALTER TABLE 语句应该比运行两个更快。
根据我的经验(在 5.1 和 5.5 上使用 InnoDB),MySQL 似乎没有“就地”修改表。 MySQL 实际上创建了一个新表,作为具有指定修改的旧表的副本。
两个单独的语句需要 MySQL 执行两次复制操作。
通过一条语句,您可以让 MySQL 有机会通过一次复制操作进行所有更改。 (我不知道 MySQL 内部的细节,但有可能 MySQL 实际上做了两次复制。)
其他数据库引擎(MyISAM 等)的处理方式可能不同。
我相信 MySQL 中的 InnoDB 插件和/或更新版本的 InnoDB (>5.5) 有一些算法而不是“复制”方法,至少对于一些更改,这允许表在ALTER TABLE 正在运行(用于读取查询)。但我不知道所有的细节。
关于mysql - 在同一个查询中更改多个列是否更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23281540/