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

Ben*_*ine 6 mysql sql alter-table

在一个查询中添加或删除多个列是否更快,而不是为每个列执行查询?例如,是这样的:

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
Run Code Online (Sandbox Code Playgroud)

比这快吗?

ALTER TABLE t2 DROP COLUMN c;
ALTER TABLE t2 DROP COLUMN d;
Run Code Online (Sandbox Code Playgroud)

spe*_*593 7

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

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

两个单独的语句需要MySQL两次执行该复制操作.

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

其他数据库引擎(MyISAM等)可能会得到不同的处理.


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


Bar*_*mar 6

是的,它更快。您只需调用一次数据库 API,它只需解析一次查询。

However, for ALTER TABLE queries, performance usually isn't a concern. You shouldn't be doing this frequently, only when you redesign your schema.

But if your question were about UPDATE queries, for instance, it would probably be significant. E.g. you should do:

UPDATE table
SET col1 = foo, col2 = bar
WHERE <condition>;
Run Code Online (Sandbox Code Playgroud)

rather than

UPDATE table
SET col1 = foo
WHERE <condition>;

UPDATE table
SET col2 = bar
WHERE <condition>;
Run Code Online (Sandbox Code Playgroud)