mysql - 在同一个查询中更改多个列是否更快?

标签 mysql sql alter-table

在一个查询中添加或删除多个列比对每个列执行一个查询更快吗?例如,是这样的:

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/

相关文章:

Sql 转换为 Linq - Left Join、Group、Min 和 Sum

mysql - SQL 非负数和 TinyInt 问题

sql-server - 如何将一个具有标识的表复制到另一台 SQL Server

sql - 像整数运算符

带参数 OLEDB 源的 SQL 命令文本

php - CodeIgniter 上的 MySql 脚本更新

mysql - Powershell - 插入 MySQL 数据库表错误?

PHP变量正确回显但未进入数据库

php - 从普通 MySql 切换到 PDO 但无法使登录过程正常工作

mysql - 选择没有至少一个关联的值