MySQL UPDATE性能,有或没有WHERE IS NULL

时间:2017-09-14 16:50:18

标签: mysql performance

假设我的mysql数据库中有3亿用户(innodb)。其中一些设置为username,而其中一些设置为“用户名为空”,并且假设其中60%不为空(具有实际的varchar值)。

如果我想设置所有3亿用户'用户名为null,将

UPDATE users SET username = null WHERE username IS NOT NULL

表现优于

UPDATE users SET username = null - 没有WHERE子句,只需将它们全部置空?

我知道在设置实际值时,WHERE总是表现得更快,但不知何故,空字段让我想到了这一点。

1 个答案:

答案 0 :(得分:1)

两者都会花费很长时间。我建议你按照我在博客中描述的“块”进行操作: http://mysql.rjweb.org/doc.php/deletebig#deleting_in_chunks

这是另一种解决方案:

ALTER TABLE t DROP COLUMN c;
ALTER TABLE t ADD COLUMN c VARCHAR(...) DEFAULT NULL;

每个ALTER会将表复制一次而不用写入ROLLBACK日志(等),从而显着加快速度。 (我怀疑你是否可以将两者结合成一个陈述。)

但首先,让我们回过头来讨论为什么你需要做这个不寻常的任务。这很可能表明架构设计不佳。重新思考设计可能是一种更好的方法。