更改同一查询中的多个列是否更快?

时间:2014-04-24 23:16:47

标签: 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;

2 个答案:

答案 0 :(得分:7)

是的,运行单个ALTER TABLE语句应该比两个更快。

根据我的经验(使用InnoDB 5.1和5.5),MySQL似乎并没有“就地”修改表格。 MySQL实际上创建了一个新表,作为具有指定修改的旧表的副本。

两个单独的语句需要MySQL进行两次复制操作。

使用单个语句,您可以让MySQL有机会通过一次复制操作进行所有更改。 (我不知道MySQL内部的细节,但MySQL实际上可能会复制两次。)

其他数据库引擎(MyISAM等)的处理方式可能不同。


我相信MySQL(> 5.5)中的InnoDB插件和/或更新版本的InnoDB具有除“复制”方法之外的一些算法,至少对于某些更改而言,这使得表仍然可用ALTER TABLE正在运行(用于读取查询)。但我不知道所有的细节。

答案 1 :(得分:4)

是的,速度更快。您只需要对数据库API进行一次调用,它只需要解析一次查询。

但是,对于ALTER TABLE查询,效果通常不是问题。只有在重新设计架构时,才应该经常这样做。

但是,如果您的问题是关于UPDATE查询,那么它可能会很重要。例如。你应该这样做:

UPDATE table
SET col1 = foo, col2 = bar
WHERE <condition>;

而不是

UPDATE table
SET col1 = foo
WHERE <condition>;

UPDATE table
SET col2 = bar
WHERE <condition>;