mysql UPDATE语句-相同值的开销?

mysql UPDATE语句-相同值的开销?,mysql,Mysql,我有一个大型MYSQL数据库,其中包含数十万条记录。我想更新大量字段,但我不知道该字段是否已更新 如果我调用一个update语句,将authortype设置为10,并且authortype已经是10,那么这会比单独查询只选择那些不是authortype=10的对象然后更新它们快吗 换句话说,如果我将一个值设置为它已经存在的值,这是否比我将一个值更新为新值快?同样的,这是一个有着大量记录的系统,我想提高效率 提前感谢为什么不直接使用 UPDATE dbo.Authors SET Auth

我有一个大型MYSQL数据库,其中包含数十万条记录。我想更新大量字段,但我不知道该字段是否已更新

如果我调用一个update语句,将authortype设置为10,并且authortype已经是10,那么这会比单独查询只选择那些不是authortype=10的对象然后更新它们快吗

换句话说,如果我将一个值设置为它已经存在的值,这是否比我将一个值更新为新值快?同样的,这是一个有着大量记录的系统,我想提高效率

提前感谢

为什么不直接使用

UPDATE  dbo.Authors
SET     AuthorType = 10
WHERE   AuthorType <> 10
更新dbo.Authors
设置AuthorType=10
其中authortype10
并且两者兼得

请注意,几十万条记录对任何现代数据库引擎都不会造成任何问题


小编辑

不,MySQL是智能的,不会变慢。不要费心去检查,MySQL会帮你做的

如果将列设置为当前的值,MySQL会注意到这一点,并且不会对其进行更新。不执行任何写入操作。()

但是
MySQL可以在要更新的列上使用WHERE子句来确定要使用的索引(以及要检查的行),在这种情况下,它可能会加快更新操作如果您的列已编制索引,请务必将其包括在内

如果您的表包含数十万行,则不必担心需要多长时间。做出决定所需的时间将远远超过仅仅做决定所需的时间


如果您有数亿行,情况可能会有所不同。

这比执行两次查询要快,而且应该比更新不需要更新的记录要快。OP要求提供最有效的解决方案。他现在的印象是,不使用where子句是最有效的解决方案。WHERE子句可能使用索引进行更新。这总是比空白更新好得多。@Lieven哦,什么?当我认为这个答案是错误的时候,我不知道我在抽什么——你能做一个小的修改,这样我就可以把我的反对票改成赞成票吗?@Lieven,谢谢。很抱歉,我不知道我在看什么东西,但他们应该在盒子上打印“不要与互联网结合;”@JiminyCricket-小心这可能会误导你的实际问题。单独的查询很可能会更慢。我相信Konerak告诉你的是,不使用where子句并不慢。我不同意。原则上,
,其中,
可以更快,不是因为它会短路任何写操作,而是因为它可以使用索引来缩小要首先查看的行数。实际上,像
authortype10
这样的不平等比较不会从索引中受益。