我有一个包含数十万条记录的大型MYSQL数据库。我想更新其中的一个字段,但我不知道该字段是否已更新。
如果我调用一个设置authortype = 10且authortype已经为10的更新语句,这会比单独的查询更快地选择那些不是authortype = 10然后更新它们吗?
换句话说,如果我设置的值等于它已经存在的值,那么比将值更新为新值更快吗?再次,这是有大量和大量的记录,我希望有效率。
提前致谢
答案 0 :(得分:14)
不, MySQL很聪明,不会慢一些。不要经历检查的麻烦,MySQL会为你做。
如果将列设置为当前的值,MySQL会注意到这一点并且不会更新它。不执行写入操作。 (Source)
MySQL可以在要更新的列上使用WHERE子句来确定要使用的索引(以及要检查的行),在这种情况下,它可能会加快UPDATE操作。 如果您的列已编入索引,请将其包括在内。
答案 1 :(得分:8)
为什么不使用
UPDATE dbo.Authors
SET AuthorType = 10
WHERE AuthorType <> 10
并且拥有两全其美。
请注意,对于任何现代数据库引擎而言,几十万条记录都不会造成任何问题。
次要编辑
答案 2 :(得分:0)
如果您的表包含数十万行,则无需担心需要多长时间。决定的时间将远远大于完成它的时间。
如果有数亿行,那可能是另一回事。